# embedding_metadata

key: chroma:document
string_value:
start_time (ray.job_submission.JobDetails attribute)

(ray.job_submission.JobInfo attribute)


start_time_ms (ray.util.state.common.NodeState attribute)

(ray.util.state.common.TaskState attribute)

(ray.util.state.common.WorkerState attribute)


start_time_s (ray.serve.schema.ReplicaDetails attribute)

start_timeout (ray.train.horovod.HorovodConfig property)

State

state (ray.serve.schema.ReplicaDetails attribute)

(ray.util.state.common.ActorState attribute)

(ray.util.state.common.NodeState attribute)

(ray.util.state.common.PlacementGroupState attribute)

(ray.util.state.common.TaskState attribute)


state_counts (ray.util.state.common.ActorSummaryPerClass attribute)

(ray.util.state.common.TaskSummaryPerFuncOrClassName attribute)


StateSummary (class in ray.util.state.common)

stats (ray.util.state.common.PlacementGroupState attribute)

stats() (ray.data.DataIterator method)

(ray.data.Dataset method)

(ray.data.random_access_dataset.RandomAccessDataset method)


key: chroma:document
string_value:
(ray.data.Dataset method)

(ray.data.random_access_dataset.RandomAccessDataset method)

(ray.rllib.utils.replay_buffers.multi_agent_prioritized_replay_buffer.MultiAgentPrioritizedReplayBuffer method)

(ray.rllib.utils.replay_buffers.multi_agent_replay_buffer.MultiAgentReplayBuffer method)

(ray.rllib.utils.replay_buffers.prioritized_replay_buffer.PrioritizedReplayBuffer method)

(ray.rllib.utils.replay_buffers.replay_buffer.ReplayBuffer method)

(ray.rllib.utils.replay_buffers.reservoir_replay_buffer.ReservoirReplayBuffer method)


stats_fn() (ray.rllib.policy.eager_tf_policy_v2.EagerTFPolicyV2 method)

(ray.rllib.policy.torch_policy_v2.TorchPolicyV2 method)


status (ray.job_submission.JobDetails attribute)

(ray.job_submission.JobInfo attribute)

(ray.serve.schema.ApplicationDetails attribute)

(ray.serve.schema.DeploymentDetails attribute)

(ray.tune.experiment.trial.Trial attribute)


status() (in module ray.serve)

Std (class in ray.data.aggregate)


key: chroma:document
string_value:
status() (in module ray.serve)

Std (class in ray.data.aggregate)

std() (ray.data.Dataset method)

(ray.data.grouped_data.GroupedData method)


step() (ray.rllib.algorithms.algorithm.Algorithm method)

(ray.rllib.env.multi_agent_env.MultiAgentEnv method)

(ray.tune.Trainable method)


StochasticSampling (class in ray.rllib.utils.exploration.stochastic_sampling)

stop (ray.train.RunConfig attribute)

STOP (ray.tune.schedulers.FIFOScheduler attribute)

(ray.tune.schedulers.HyperBandForBOHB attribute)

(ray.tune.schedulers.HyperBandScheduler attribute)

(ray.tune.schedulers.MedianStoppingRule attribute)

(ray.tune.schedulers.pb2.PB2 attribute)

(ray.tune.schedulers.PopulationBasedTraining attribute)

(ray.tune.schedulers.PopulationBasedTrainingReplay attribute)

(ray.tune.schedulers.ResourceChangingScheduler attribute)

(ray.tune.schedulers.TrialScheduler attribute)


stop() (ray.autoscaler._private.fake_multi_node.test_utils.DockerCluster method)


key: chroma:document
string_value:
stop() (ray.autoscaler._private.fake_multi_node.test_utils.DockerCluster method)

(ray.rllib.algorithms.algorithm.Algorithm method)

(ray.rllib.env.base_env.BaseEnv method)

(ray.rllib.evaluation.rollout_worker.RolloutWorker method)

(ray.rllib.evaluation.worker_set.WorkerSet method)

(ray.tune.Trainable method)


stop_all() (ray.tune.stopper.ExperimentPlateauStopper method)

(ray.tune.stopper.Stopper method)


stop_experiment() (ray.tune.web_server.TuneClient method)

stop_job() (ray.job_submission.JobSubmissionClient method)

stop_trial() (ray.tune.web_server.TuneClient method)

STOPPED (ray.job_submission.JobStatus attribute)

Stopper (class in ray.tune.stopper)

stopper (ray.tune.Experiment property)

storage_filesystem (ray.train.RunConfig attribute)

storage_path (ray.train.RunConfig attribute)

StorageUnit (class in ray.rllib.utils.replay_buffers.replay_buffer)

strategy (ray.tune.execution.placement_groups.PlacementGroupFactory property)


key: chroma:document
string_value:
strategy (ray.tune.execution.placement_groups.PlacementGroupFactory property)

streaming_split() (ray.data.Dataset method)

style (ray.data.datasource.Partitioning attribute)

SUBMISSION (ray.job_submission.JobType attribute)

submission_id (ray.job_submission.JobDetails attribute)

submit() (ray.util.ActorPool method)

submit_job() (ray.job_submission.JobSubmissionClient method)

SUCCEEDED (ray.job_submission.JobStatus attribute)

success (ray.util.state.common.RuntimeEnvState attribute)

suggest() (ray.tune.search.bayesopt.BayesOptSearch method)

(ray.tune.search.Searcher method)


Sum (class in ray.data.aggregate)

sum() (ray.data.Dataset method)

(ray.data.grouped_data.GroupedData method)


summarize_actors() (in module ray.util.state)

summarize_objects() (in module ray.util.state)

summarize_tasks() (in module ray.util.state)

summary (ray.util.state.common.ActorSummaries attribute)

(ray.util.state.common.ObjectSummaries attribute)


key: chroma:document
string_value:
(ray.util.state.common.ObjectSummaries attribute)


supports_buffered_results (ray.tune.schedulers.FIFOScheduler property)

(ray.tune.schedulers.HyperBandForBOHB property)

(ray.tune.schedulers.HyperBandScheduler property)

(ray.tune.schedulers.MedianStoppingRule property)

(ray.tune.schedulers.pb2.PB2 property)

(ray.tune.schedulers.PopulationBasedTraining property)

(ray.tune.schedulers.PopulationBasedTrainingReplay property)

(ray.tune.schedulers.ResourceChangingScheduler property)

(ray.tune.schedulers.TrialScheduler property)


supports_distributed_reads (ray.data.Datasource property)

supports_distributed_writes (ray.data.BlockBasedFileDatasink property)

(ray.data.Datasink property)

(ray.data.RowBasedFileDatasink property)


sync_artifacts (ray.train.SyncConfig attribute)

sync_artifacts_on_checkpoint (ray.train.SyncConfig attribute)

sync_config (ray.train.RunConfig attribute)

sync_filters() (ray.rllib.evaluation.rollout_worker.RolloutWorker method)


key: chroma:document
string_value:
sync_filters() (ray.rllib.evaluation.rollout_worker.RolloutWorker method)

sync_on_checkpoint (ray.train.SyncConfig attribute)

sync_period (ray.train.SyncConfig attribute)

sync_timeout (ray.train.SyncConfig attribute)

sync_weights() (ray.rllib.evaluation.worker_set.WorkerSet method)

SyncConfig (class in ray.train)

syncer (ray.train.SyncConfig attribute)

synchronize() (in module ray.util.collective.collective)

Synchronous execution

Synchronous sampling

SyncSampler (class in ray.rllib.evaluation.sampler)



T


T (ray.rllib.policy.sample_batch.SampleBatch attribute)

tail_job_logs() (ray.job_submission.JobSubmissionClient method)

take() (ray.data.block.BlockAccessor method)

(ray.data.Dataset method)


take_all() (ray.data.Dataset method)

take_batch() (ray.data.Dataset method)

target_capacity (ray.serve.schema.ServeDeploySchema attribute)

(ray.serve.schema.ServeInstanceDetails attribute)


key: chroma:document
string_value:
(ray.serve.schema.ServeInstanceDetails attribute)


target_num_ongoing_requests_per_replica (ray.serve.config.AutoscalingConfig attribute)

Task

task_id (ray.runtime_context.RuntimeContext property)

(ray.util.state.common.TaskState attribute)


task_log_info (ray.util.state.common.TaskState attribute)

task_state_counts (ray.util.state.common.ObjectSummaryPerKey attribute)

task_status (ray.util.state.common.ObjectState attribute)

TaskCancelledError

TaskPlacementGroupRemoved

TaskState (class in ray.util.state.common)

TaskSummaries (class in ray.util.state.common)

TaskSummaryPerFuncOrClassName (class in ray.util.state.common)

TaskUnschedulableError

TBXLoggerCallback (class in ray.tune.logger)

teardown() (ray.autoscaler._private.fake_multi_node.test_utils.DockerCluster method)

TensorflowConfig (class in ray.train.tensorflow)

TensorflowTrainer (class in ray.train.tensorflow)

TERMINATEDS (ray.rllib.policy.sample_batch.SampleBatch attribute)


key: chroma:document
string_value:
TERMINATEDS (ray.rllib.policy.sample_batch.SampleBatch attribute)

tf_input_ops() (ray.rllib.evaluation.sampler.AsyncSampler method)

(ray.rllib.evaluation.sampler.SamplerInput method)

(ray.rllib.evaluation.sampler.SyncSampler method)

(ray.rllib.offline.d4rl_reader.D4RLReader method)

(ray.rllib.offline.input_reader.InputReader method)

(ray.rllib.offline.json_reader.JsonReader method)

(ray.rllib.offline.mixed_input.MixedInput method)


TFModelV2 (class in ray.rllib.models.tf.tf_modelv2)

time_budget_s (ray.tune.TuneConfig attribute)

timeline() (in module ray)

timeout_s (ray.train.horovod.HorovodConfig attribute)

(ray.train.torch.TorchConfig attribute)


TimeoutStopper (class in ray.tune.stopper)

timeslices() (ray.rllib.policy.sample_batch.MultiAgentBatch method)

(ray.rllib.policy.sample_batch.SampleBatch method)


TIMESTEPS (ray.rllib.utils.replay_buffers.replay_buffer.StorageUnit attribute)

to_arrow() (ray.data.block.BlockAccessor method)


key: chroma:document
string_value:
to_arrow() (ray.data.block.BlockAccessor method)

to_arrow_refs() (ray.data.Dataset method)

to_base_env() (ray.rllib.env.base_env.BaseEnv method)

(ray.rllib.env.external_env.ExternalEnv method)

(ray.rllib.env.vector_env.VectorEnv method)


to_batch_format() (ray.data.block.BlockAccessor method)

to_block() (ray.data.block.BlockAccessor method)

to_dask() (ray.data.Dataset method)

to_default() (ray.data.block.BlockAccessor method)

to_device() (ray.rllib.policy.sample_batch.SampleBatch method)

to_dict() (ray.rllib.algorithms.algorithm_config.AlgorithmConfig method)

(ray.rllib.core.rl_module.marl_module.MultiAgentRLModuleSpec method)

(ray.rllib.core.rl_module.rl_module.RLModuleConfig method)

(ray.rllib.core.rl_module.rl_module.SingleAgentRLModuleSpec method)


to_directory() (ray.train.Checkpoint method)

to_json() (ray.job_submission.JobInfo method)

to_mars() (ray.data.Dataset method)

to_modin() (ray.data.Dataset method)

to_numpy() (ray.data.block.BlockAccessor method)


key: chroma:document
string_value:
to_modin() (ray.data.Dataset method)

to_numpy() (ray.data.block.BlockAccessor method)

to_numpy_refs() (ray.data.Dataset method)

to_pandas() (ray.data.block.BlockAccessor method)

(ray.data.Dataset method)


to_pandas_refs() (ray.data.Dataset method)

to_random_access_dataset() (ray.data.Dataset method)

to_spark() (ray.data.Dataset method)

to_summary_by_lineage() (ray.util.state.common.TaskSummaries class method)

to_tf() (ray.data.DataIterator method)

(ray.data.Dataset method)


to_torch() (ray.data.Dataset method)

torch_compile (ray.rllib.core.learner.learner.FrameworkHyperparameters attribute)

torch_compile_cfg (ray.rllib.core.learner.learner.FrameworkHyperparameters attribute)

TorchCompileWhatToCompile (class in ray.rllib.core.learner.learner)

TorchConfig (class in ray.train.torch)

TorchModelV2 (class in ray.rllib.models.torch.torch_modelv2)

TorchPolicyV2 (class in ray.rllib.policy.torch_policy_v2)

TorchTrainer (class in ray.train.torch)


key: chroma:document
string_value:
TorchPolicyV2 (class in ray.rllib.policy.torch_policy_v2)

TorchTrainer (class in ray.train.torch)

total_actor_scheduled (ray.util.state.common.TaskSummaries attribute)

total_actor_tasks (ray.util.state.common.TaskSummaries attribute)

total_actors (ray.util.state.common.ActorSummaries attribute)

TOTAL_LOSS_KEY (ray.rllib.core.learner.learner.Learner attribute)

total_num_nodes (ray.util.state.common.ObjectSummaryPerKey attribute)

total_num_workers (ray.util.state.common.ObjectSummaryPerKey attribute)

total_objects (ray.util.state.common.ObjectSummaries attribute)

(ray.util.state.common.ObjectSummaryPerKey attribute)


total_resources (ray.train.ScalingConfig property)

total_samples (ray.tune.search.basic_variant.BasicVariantGenerator property)

total_size_mb (ray.util.state.common.ObjectSummaries attribute)

(ray.util.state.common.ObjectSummaryPerKey attribute)


total_tasks (ray.util.state.common.TaskSummaries attribute)


key: chroma:document
string_value:
total_tasks (ray.util.state.common.TaskSummaries attribute)

train() (ray.rllib.algorithms.algorithm.Algorithm method)

(ray.tune.Trainable method)


train_buffered() (ray.rllib.algorithms.algorithm.Algorithm method)

(ray.tune.Trainable method)


train_one_step() (in module ray.rllib.execution.train_ops)

train_test_split() (ray.data.Dataset method)

Trainable

(class in ray.tune)


trainable_name (ray.tune.experiment.trial.Trial attribute)

trainable_variables() (ray.rllib.models.modelv2.ModelV2 method)

TrainContext (class in ray.train.context)

Trainer

Trainer configuration

trainer_resources (ray.train.ScalingConfig attribute)

Training epoch

Training iteration



Training step

training() (ray.rllib.algorithms.algorithm_config.AlgorithmConfig method)

(ray.rllib.algorithms.appo.appo.APPOConfig method)

(ray.rllib.algorithms.bc.bc.BCConfig method)

(ray.rllib.algorithms.cql.cql.CQLConfig method)

(ray.rllib.algorithms.dqn.dqn.DQNConfig method)


key: chroma:document
string_value:
(ray.rllib.algorithms.cql.cql.CQLConfig method)

(ray.rllib.algorithms.dqn.dqn.DQNConfig method)

(ray.rllib.algorithms.impala.impala.ImpalaConfig method)

(ray.rllib.algorithms.marwil.marwil.MARWILConfig method)

(ray.rllib.algorithms.ppo.ppo.PPOConfig method)

(ray.rllib.algorithms.sac.sac.SACConfig method)


training_iteration (ray.rllib.algorithms.algorithm.Algorithm property)

(ray.tune.Trainable property)


training_loop() (ray.train.trainer.BaseTrainer method)

training_step() (ray.rllib.algorithms.algorithm.Algorithm method)

transform() (ray.data.preprocessor.Preprocessor method)

(ray.data.preprocessors.Categorizer method)

(ray.data.preprocessors.Concatenator method)

(ray.data.preprocessors.CustomKBinsDiscretizer method)

(ray.data.preprocessors.LabelEncoder method)

(ray.data.preprocessors.MaxAbsScaler method)

(ray.data.preprocessors.MinMaxScaler method)

(ray.data.preprocessors.MultiHotEncoder method)

(ray.data.preprocessors.Normalizer method)


key: chroma:document
string_value:
(ray.data.preprocessors.MultiHotEncoder method)

(ray.data.preprocessors.Normalizer method)

(ray.data.preprocessors.OneHotEncoder method)

(ray.data.preprocessors.OrdinalEncoder method)

(ray.data.preprocessors.PowerTransformer method)

(ray.data.preprocessors.RobustScaler method)

(ray.data.preprocessors.SimpleImputer method)

(ray.data.preprocessors.StandardScaler method)

(ray.data.preprocessors.UniformKBinsDiscretizer method)


transform_batch() (ray.data.preprocessor.Preprocessor method)

(ray.data.preprocessors.Categorizer method)

(ray.data.preprocessors.Concatenator method)

(ray.data.preprocessors.CustomKBinsDiscretizer method)

(ray.data.preprocessors.LabelEncoder method)

(ray.data.preprocessors.MaxAbsScaler method)

(ray.data.preprocessors.MinMaxScaler method)

(ray.data.preprocessors.MultiHotEncoder method)

(ray.data.preprocessors.Normalizer method)

(ray.data.preprocessors.OneHotEncoder method)

(ray.data.preprocessors.OrdinalEncoder method)


key: chroma:document
string_value:
(ray.data.preprocessors.OneHotEncoder method)

(ray.data.preprocessors.OrdinalEncoder method)

(ray.data.preprocessors.PowerTransformer method)

(ray.data.preprocessors.RobustScaler method)

(ray.data.preprocessors.SimpleImputer method)

(ray.data.preprocessors.StandardScaler method)

(ray.data.preprocessors.UniformKBinsDiscretizer method)


transform_stats() (ray.data.preprocessor.Preprocessor method)

(ray.data.preprocessors.Categorizer method)

(ray.data.preprocessors.Concatenator method)

(ray.data.preprocessors.CustomKBinsDiscretizer method)

(ray.data.preprocessors.LabelEncoder method)

(ray.data.preprocessors.MaxAbsScaler method)

(ray.data.preprocessors.MinMaxScaler method)

(ray.data.preprocessors.MultiHotEncoder method)

(ray.data.preprocessors.Normalizer method)

(ray.data.preprocessors.OneHotEncoder method)

(ray.data.preprocessors.OrdinalEncoder method)

(ray.data.preprocessors.PowerTransformer method)

(ray.data.preprocessors.RobustScaler method)


key: chroma:document
string_value:
(ray.data.preprocessors.PowerTransformer method)

(ray.data.preprocessors.RobustScaler method)

(ray.data.preprocessors.SimpleImputer method)

(ray.data.preprocessors.StandardScaler method)

(ray.data.preprocessors.UniformKBinsDiscretizer method)


Transition

Trial

(class in ray.tune.experiment.trial)


Trial Executor

Trial scheduler

trial_dataframes (ray.tune.ExperimentAnalysis property)

trial_dirname_creator (ray.tune.TuneConfig attribute)

trial_id (ray.rllib.algorithms.algorithm.Algorithm property)

(ray.tune.experiment.trial.Trial attribute)

(ray.tune.Trainable property)


trial_name (ray.rllib.algorithms.algorithm.Algorithm property)

(ray.tune.Trainable property)


trial_name_creator (ray.tune.TuneConfig attribute)

trial_resources (ray.rllib.algorithms.algorithm.Algorithm property)

(ray.tune.Trainable property)


TrialPlateauStopper (class in ray.tune.stopper)

TrialScheduler (class in ray.tune.schedulers)


key: chroma:document
string_value:
TrialPlateauStopper (class in ray.tune.stopper)

TrialScheduler (class in ray.tune.schedulers)

TRUNCATEDS (ray.rllib.policy.sample_batch.SampleBatch attribute)

try_import_tf() (in module ray.rllib.utils.framework)

try_import_tfp() (in module ray.rllib.utils.framework)

try_import_torch() (in module ray.rllib.utils.framework)

try_render() (ray.rllib.env.base_env.BaseEnv method)

try_render_at() (ray.rllib.env.vector_env._VectorizedGymEnv method)

(ray.rllib.env.vector_env.VectorEnv method)


try_reset() (ray.rllib.env.base_env.BaseEnv method)

try_restart() (ray.rllib.env.base_env.BaseEnv method)

Tune Config

Tune Driver

tune_address (ray.tune.web_server.TuneClient attribute)

TuneBOHB (class in ray.tune.search.bohb)

TuneClient (class in ray.tune.web_server)

TuneConfig (class in ray.tune)

Tuner

(class in ray.tune)


TuneReportCallback (class in ray.tune.integration.lightgbm)

(class in ray.tune.integration.pytorch_lightning)

(class in ray.tune.integration.xgboost)


key: chroma:document
string_value:
(class in ray.tune.integration.pytorch_lightning)

(class in ray.tune.integration.xgboost)


TuneReportCheckpointCallback (class in ray.tune.integration.lightgbm)

(class in ray.tune.integration.pytorch_lightning)

(class in ray.tune.integration.xgboost)


TunerInternal (class in ray.tune.impl.tuner_internal)

type (ray.job_submission.JobDetails attribute)

(ray.util.state.common.ObjectState attribute)

(ray.util.state.common.TaskState attribute)

(ray.util.state.common.TaskSummaryPerFuncOrClassName attribute)




U


uniform() (in module ray.tune)

UniformKBinsDiscretizer (class in ray.data.preprocessors)

union() (ray.data.Dataset method)

unique() (ray.data.Dataset method)

unlock() (ray.rllib.evaluation.rollout_worker.RolloutWorker method)

UNROLL_ID (ray.rllib.policy.sample_batch.SampleBatch attribute)

unwrapped() (ray.rllib.core.rl_module.marl_module.MultiAgentRLModule method)

(ray.rllib.core.rl_module.rl_module.RLModule method)


key: chroma:document
string_value:
(ray.rllib.core.rl_module.rl_module.RLModule method)


update() (ray.rllib.core.learner.learner.Learner method)

(ray.rllib.core.learner.learner_group.LearnerGroup method)

(ray.rllib.core.rl_module.marl_module.MultiAgentRLModuleSpec method)

(ray.rllib.core.rl_module.rl_module.SingleAgentRLModuleSpec method)

(ray.rllib.policy.sample_batch.SampleBatch method)

(ray.runtime_env.RuntimeEnv method)

(ray.runtime_env.RuntimeEnvConfig method)


update_config() (ray.autoscaler._private.fake_multi_node.test_utils.DockerCluster method)



update_default_view_requirements() (ray.rllib.core.rl_module.marl_module.MultiAgentRLModule method)

(ray.rllib.core.rl_module.rl_module.RLModule method)


update_from_dict() (ray.rllib.algorithms.algorithm_config.AlgorithmConfig method)

update_metadata() (ray.train.Checkpoint method)

update_ops() (ray.rllib.models.tf.tf_modelv2.TFModelV2 method)

update_policy_weights() (ray.rllib.env.policy_client.PolicyClient method)


key: chroma:document
string_value:
update_policy_weights() (ray.rllib.env.policy_client.PolicyClient method)

update_priorities() (ray.rllib.utils.replay_buffers.multi_agent_prioritized_replay_buffer.MultiAgentPrioritizedReplayBuffer method)

(ray.rllib.utils.replay_buffers.prioritized_replay_buffer.PrioritizedReplayBuffer method)


update_priorities_in_replay_buffer() (in module ray.rllib.utils.replay_buffers.utils)

update_resources() (ray.tune.experiment.trial.Trial method)

upload_dir (ray.train.SyncConfig attribute)

upscale_delay_s (ray.serve.config.AutoscalingConfig attribute)

upscale_smoothing_factor (ray.serve.config.AutoscalingConfig attribute)

use_gpu (ray.train.ScalingConfig attribute)

user_config (ray.serve.Deployment property)

(ray.serve.schema.DeploymentSchema attribute)




V


VALID_HPARAMS (ray.tune.logger.aim.AimLoggerCallback attribute)

(ray.tune.logger.TBXLoggerCallback attribute)


VALID_NP_HPARAMS (ray.tune.logger.aim.AimLoggerCallback attribute)


key: chroma:document
string_value:
VALID_NP_HPARAMS (ray.tune.logger.aim.AimLoggerCallback attribute)

(ray.tune.logger.TBXLoggerCallback attribute)


VALID_SUMMARY_TYPES (ray.tune.CLIReporter attribute)

(ray.tune.JupyterNotebookReporter attribute)


validate() (ray.rllib.algorithms.algorithm_config.AlgorithmConfig method)

validate_env() (ray.rllib.algorithms.algorithm.Algorithm static method)

validate_save_restore() (in module ray.tune.utils)

validate_train_batch_size_vs_rollout_fragment_length() (ray.rllib.algorithms.algorithm_config.AlgorithmConfig method)

value() (ray.rllib.utils.schedules.constant_schedule.ConstantSchedule method)

(ray.rllib.utils.schedules.exponential_schedule.ExponentialSchedule method)

(ray.rllib.utils.schedules.linear_schedule.LinearSchedule method)

(ray.rllib.utils.schedules.piecewise_schedule.PiecewiseSchedule method)

(ray.rllib.utils.schedules.polynomial_schedule.PolynomialSchedule method)

(ray.rllib.utils.schedules.schedule.Schedule method)


key: chroma:document
string_value:
(ray.rllib.utils.schedules.schedule.Schedule method)


value_function() (ray.rllib.models.modelv2.ModelV2 method)

(ray.rllib.models.tf.tf_modelv2.TFModelV2 method)

(ray.rllib.models.torch.torch_modelv2.TorchModelV2 method)




values() (ray.rllib.algorithms.algorithm_config.AlgorithmConfig method)

(ray.rllib.policy.policy_map.PolicyMap method)

(ray.rllib.policy.sample_batch.SampleBatch method)

(ray.runtime_env.RuntimeEnv method)

(ray.runtime_env.RuntimeEnvConfig method)


VALUES_BOOTSTRAPPED (ray.rllib.policy.sample_batch.SampleBatch attribute)

variables() (ray.rllib.models.modelv2.ModelV2 method)

(ray.rllib.policy.eager_tf_policy_v2.EagerTFPolicyV2 method)


vector_reset() (ray.rllib.env.vector_env._VectorizedGymEnv method)

(ray.rllib.env.vector_env.VectorEnv method)


vector_step() (ray.rllib.env.vector_env._VectorizedGymEnv method)

(ray.rllib.env.vector_env.VectorEnv method)


VectorEnv (class in ray.rllib.env.vector_env)


key: chroma:document
string_value:
(ray.rllib.env.vector_env.VectorEnv method)


VectorEnv (class in ray.rllib.env.vector_env)

vectorize_gym_envs() (ray.rllib.env.vector_env.VectorEnv static method)

verbose (ray.train.horovod.HorovodConfig attribute)

(ray.train.RunConfig attribute)


verbose_progress (ray.data.ExecutionOptions attribute)

VF_PREDS (ray.rllib.policy.sample_batch.SampleBatch attribute)



W


wait() (in module ray)

(ray.util.placement_group.PlacementGroup method)


wait_for_gpu() (in module ray.tune.utils)

wait_for_resources() (ray.autoscaler._private.fake_multi_node.test_utils.DockerCluster static method)

wall_time_s (ray.data.block.BlockExecStats attribute)

warn_for_middlewares() (ray.serve.config.HTTPOptions class method)

warn_for_num_cpus() (ray.serve.config.HTTPOptions class method)

warn_if_infinite_kl_divergence() (in module ray.rllib.utils.tf_utils)

(in module ray.rllib.utils.torch_utils)


was_current_actor_reconstructed (ray.runtime_context.RuntimeContext property)


key: chroma:document
string_value:
was_current_actor_reconstructed (ray.runtime_context.RuntimeContext property)

what_to_compile (ray.rllib.core.learner.learner.FrameworkHyperparameters attribute)

window() (ray.data.Dataset method)

with_agent_groups() (ray.rllib.env.multi_agent_env.MultiAgentEnv method)

with_parameters() (in module ray.tune)

with_resources() (in module ray.tune)

Worker process / worker

worker_id (ray.util.state.common.TaskState attribute)

(ray.util.state.common.WorkerState attribute)


worker_launch_time_ms (ray.util.state.common.WorkerState attribute)

worker_launched_time_ms (ray.util.state.common.WorkerState attribute)



worker_pid (ray.util.state.common.TaskState attribute)

worker_type (ray.util.state.common.WorkerState attribute)

WorkerCrashedError

WorkerSet (class in ray.rllib.evaluation.worker_set)

WorkerState (class in ray.util.state.common)

wrap_as_needed() (ray.rllib.policy.sample_batch.MultiAgentBatch static method)


key: chroma:document
string_value:
wrap_as_needed() (ray.rllib.policy.sample_batch.MultiAgentBatch static method)

wrap_function() (in module ray.tune.trainable.function_trainable)

write() (ray.data.Datasink method)

(ray.data.Datasource method)


write_bigquery() (ray.data.Dataset method)

write_csv() (ray.data.Dataset method)

write_datasink() (ray.data.Dataset method)

write_datasource() (ray.data.Dataset method)

write_images() (ray.data.Dataset method)

write_json() (ray.data.Dataset method)

write_mongo() (ray.data.Dataset method)

write_numpy() (ray.data.Dataset method)

write_parquet() (ray.data.Dataset method)

write_sql() (ray.data.Dataset method)

write_tfrecords() (ray.data.Dataset method)

write_webdataset() (ray.data.Dataset method)



X


XGBoostTrainer (class in ray.train.xgboost)



Z


zero_logps_from_actions() (in module ray.rllib.utils.tf_utils)

zip() (ray.data.block.BlockAccessor method)

(ray.data.Dataset method)




ZOOptSearch (class in ray.tune.search.zoopt)


key: chroma:document
string_value:
(ray.data.Dataset method)




ZOOptSearch (class in ray.tune.search.zoopt)
















Thanks for the feedback!


Was this helpful?




Yes





No



Feedback

Submit


  
    By The Ray Team
  
      © Copyright 2023, The Ray Team.


key: chroma:document
string_value:
Getting Started — Ray 3.0.0.dev0





































































Toggle navigation sidebar




Toggle in-page Table of Contents












Ray 3.0.0.dev0









                    Welcome to Ray!
                




  Ray
 




   Overview
  



   Getting Started
  



   Installation
  



   Use Cases
  



   Example Gallery
  



   Ecosystem
  



   Ray Core
  



   Ray Data
  



   Ray Train
  



   Ray Tune
  



   Ray Serve
  



   Ray RLlib
  



   More Libraries
  



   Ray Clusters
  



   Monitoring and Debugging
  



   Developer Guides
  



   Glossary
  



   Security
  







            Theme by the Executable Book Project



































repository







open issue







suggest edit
















.md







.pdf















 Contents
    




   Getting Started
  



     Ray AI Libraries Quickstart
    



     Ray Core Quickstart
    



     Ray Cluster Quickstart


key: chroma:document
string_value:
Ray Core Quickstart
    



     Ray Cluster Quickstart
    



     Debugging and Monitoring Quickstart
    





   Learn More
  



     Blog and Press
    



     Talks (Videos)
    



     Slides
    



     Papers
    











Getting Started




 Contents 





   Getting Started
  



     Ray AI Libraries Quickstart
    



     Ray Core Quickstart
    



     Ray Cluster Quickstart
    



     Debugging and Monitoring Quickstart
    





   Learn More
  



     Blog and Press
    



     Talks (Videos)
    



     Slides
    



     Papers
    











Getting Started#
Use Ray to scale applications on your laptop or the cloud. Choose the right guide for your task.

Scale ML workloads: Ray Libraries Quickstart
Scale general Python applications: Ray Core Quickstart
Deploy to the cloud: Ray Clusters Quickstart
Debug and monitor applications: Debugging and Monitoring Quickstart


key: chroma:document
string_value:
Ray AI Libraries Quickstart#
Use individual libraries for ML workloads. Click on the dropdowns for your workload below.


 Data: Scalable Datasets for ML




Scale offline inference and training ingest with Ray Data –
a data processing library designed for ML.
To learn more, see Offline batch inference and
Data preprocessing and ingest for ML training.

Note
To run this example, install Ray Data:
pip install -U "ray[data]"



from typing import Dict
import numpy as np
import ray

# Create datasets from on-disk files, Python objects, and cloud storage like S3.
ds = ray.data.read_csv("s3://anonymous@ray-example-data/iris.csv")

# Apply functions to transform data. Ray Data executes transformations in parallel.
def compute_area(batch: Dict[str, np.ndarray]) -> Dict[str, np.ndarray]:
    length = batch["petal length (cm)"]
    width = batch["petal width (cm)"]
    batch["petal area (cm^2)"] = length * width
    return batch

transformed_ds = ds.map_batches(compute_area)


key: chroma:document
string_value:
transformed_ds = ds.map_batches(compute_area)

# Iterate over batches of data.
for batch in transformed_ds.iter_batches(batch_size=4):
    print(batch)

# Save dataset contents to on-disk files or cloud storage.
transformed_ds.write_parquet("local:///tmp/iris/")


Learn more about Ray Data



 Train: Distributed Model Training




Ray Train abstracts away the complexity of setting up a distributed training
system.



PyTorch
This example shows how you can use Ray Train with PyTorch.
To run this example install Ray Train and PyTorch packages:

Note
pip install -U "ray[train]" torch torchvision



Set up your dataset and model.
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor

def get_dataset():
    return datasets.FashionMNIST(
        root="/tmp/data",
        train=True,
        download=True,
        transform=ToTensor(),
    )


key: chroma:document
string_value:
class NeuralNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28 * 28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10),
        )

    def forward(self, inputs):
        inputs = self.flatten(inputs)
        logits = self.linear_relu_stack(inputs)
        return logits


Now define your single-worker PyTorch training function.
def train_func():
    num_epochs = 3
    batch_size = 64

    dataset = get_dataset()
    dataloader = DataLoader(dataset, batch_size=batch_size)

    model = NeuralNetwork()

    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)


key: chroma:document
string_value:
criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

    for epoch in range(num_epochs):
        for inputs, labels in dataloader:
            optimizer.zero_grad()
            pred = model(inputs)
            loss = criterion(pred, labels)
            loss.backward()
            optimizer.step()
        print(f"epoch: {epoch}, loss: {loss.item()}")


This training function can be executed with:
train_func()


Convert this to a distributed multi-worker training function.
Use the ray.train.torch.prepare_model and
ray.train.torch.prepare_data_loader utility functions to
set up your model and data for distributed training.
This automatically wraps the model with DistributedDataParallel
and places it on the right device, and adds DistributedSampler to the DataLoaders.
from ray import train

def train_func_distributed():
    num_epochs = 3
    batch_size = 64


key: chroma:document
string_value:
def train_func_distributed():
    num_epochs = 3
    batch_size = 64

    dataset = get_dataset()
    dataloader = DataLoader(dataset, batch_size=batch_size)
    dataloader = train.torch.prepare_data_loader(dataloader)

    model = NeuralNetwork()
    model = train.torch.prepare_model(model)

    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

    for epoch in range(num_epochs):
        for inputs, labels in dataloader:
            optimizer.zero_grad()
            pred = model(inputs)
            loss = criterion(pred, labels)
            loss.backward()
            optimizer.step()
        print(f"epoch: {epoch}, loss: {loss.item()}")


Instantiate a TorchTrainer
with 4 workers, and use it to run the new training function.
from ray.train.torch import TorchTrainer
from ray.train import ScalingConfig

# For GPU Training, set `use_gpu` to True.
use_gpu = False


key: chroma:document
string_value:
# For GPU Training, set `use_gpu` to True.
use_gpu = False

trainer = TorchTrainer(
    train_func_distributed,
    scaling_config=ScalingConfig(num_workers=4, use_gpu=use_gpu)
)

results = trainer.fit()





TensorFlow
This example shows how you can use Ray Train to set up Multi-worker training
with Keras.
To run this example install Ray Train and Tensorflow packages:

Note
pip install -U "ray[train]" tensorflow



Set up your dataset and model.
import numpy as np
import tensorflow as tf

def mnist_dataset(batch_size):
    (x_train, y_train), _ = tf.keras.datasets.mnist.load_data()
    # The `x` arrays are in uint8 and have values in the [0, 255] range.
    # You need to convert them to float32 with values in the [0, 1] range.
    x_train = x_train / np.float32(255)
    y_train = y_train.astype(np.int64)
    train_dataset = tf.data.Dataset.from_tensor_slices(
        (x_train, y_train)).shuffle(60000).repeat().batch(batch_size)
    return train_dataset


key: chroma:document
string_value:
def build_and_compile_cnn_model():
    model = tf.keras.Sequential([
        tf.keras.layers.InputLayer(input_shape=(28, 28)),
        tf.keras.layers.Reshape(target_shape=(28, 28, 1)),
        tf.keras.layers.Conv2D(32, 3, activation='relu'),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(128, activation='relu'),
        tf.keras.layers.Dense(10)
    ])
    model.compile(
        loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),
        metrics=['accuracy'])
    return model


Now define your single-worker TensorFlow training function.
def train_func():
    batch_size = 64
    single_worker_dataset = mnist_dataset(batch_size)
    single_worker_model = build_and_compile_cnn_model()
    single_worker_model.fit(single_worker_dataset, epochs=3, steps_per_epoch=70)


This training function can be executed with:
train_func()


key: chroma:document
string_value:
This training function can be executed with:
train_func()


Now convert this to a distributed multi-worker training function.

Set the global batch size - each worker processes the same size
batch as in the single-worker code.
Choose your TensorFlow distributed training strategy. This examples
uses the MultiWorkerMirroredStrategy.

import json
import os

def train_func_distributed():
    per_worker_batch_size = 64
    # This environment variable will be set by Ray Train.
    tf_config = json.loads(os.environ['TF_CONFIG'])
    num_workers = len(tf_config['cluster']['worker'])

    strategy = tf.distribute.MultiWorkerMirroredStrategy()

    global_batch_size = per_worker_batch_size * num_workers
    multi_worker_dataset = mnist_dataset(global_batch_size)

    with strategy.scope():
        # Model building/compiling need to be within `strategy.scope()`.
        multi_worker_model = build_and_compile_cnn_model()


key: chroma:document
string_value:
multi_worker_model.fit(multi_worker_dataset, epochs=3, steps_per_epoch=70)


Instantiate a TensorflowTrainer
with 4 workers, and use it to run the new training function.
from ray.train.tensorflow import TensorflowTrainer
from ray.train import ScalingConfig

# For GPU Training, set `use_gpu` to True.
use_gpu = False

trainer = TensorflowTrainer(train_func_distributed, scaling_config=ScalingConfig(num_workers=4, use_gpu=use_gpu))

trainer.fit()


Learn more about Ray Train





 Tune: Hyperparameter Tuning at Scale




Tune is a library for hyperparameter tuning at any scale.
With Tune, you can launch a multi-node distributed hyperparameter sweep in less than 10 lines of code.
Tune supports any deep learning framework, including PyTorch, TensorFlow, and Keras.

Note
To run this example, install Ray Tune:
pip install -U "ray[tune]"



This example runs a small grid search with an iterative training function.
from ray import train, tune


key: chroma:document
string_value:
def objective(config):  # ①
    score = config["a"] ** 2 + config["b"]
    return {"score": score}


search_space = {  # ②
    "a": tune.grid_search([0.001, 0.01, 0.1, 1.0]),
    "b": tune.choice([1, 2, 3]),
}

tuner = tune.Tuner(objective, param_space=search_space)  # ③

results = tuner.fit()
print(results.get_best_result(metric="score", mode="min").config)


If TensorBoard is installed, automatically visualize all trial results:
tensorboard --logdir ~/ray_results


Learn more about Ray Tune



 Serve: Scalable Model Serving




Ray Serve is a scalable model-serving library built on Ray.

Note
To run this example, install Ray Serve and scikit-learn:
pip install -U "ray[serve]" scikit-learn



This example runs serves a scikit-learn gradient boosting classifier.
import requests
from starlette.requests import Request
from typing import Dict

from sklearn.datasets import load_iris
from sklearn.ensemble import GradientBoostingClassifier

from ray import serve


key: chroma:document
string_value:
from ray import serve


# Train model.
iris_dataset = load_iris()
model = GradientBoostingClassifier()
model.fit(iris_dataset["data"], iris_dataset["target"])


@serve.deployment
class BoostingModel:
    def __init__(self, model):
        self.model = model
        self.label_list = iris_dataset["target_names"].tolist()

    async def __call__(self, request: Request) -> Dict:
        payload = (await request.json())["vector"]
        print(f"Received http request with data {payload}")

        prediction = self.model.predict([payload])[0]
        human_name = self.label_list[prediction]
        return {"result": human_name}


# Deploy model.
serve.run(BoostingModel.bind(model), route_prefix="/iris")

# Query it!
sample_request_input = {"vector": [1.2, 1.0, 1.1, 0.9]}
response = requests.get(
    "http://localhost:8000/iris", json=sample_request_input)
print(response.text)


As a result you will see {"result": "versicolor"}.
Learn more about Ray Serve


key: chroma:document
string_value:
As a result you will see {"result": "versicolor"}.
Learn more about Ray Serve



 RLlib: Industry-Grade Reinforcement Learning




RLlib is an industry-grade library for reinforcement learning (RL) built on top of Ray.
RLlib offers high scalability and unified APIs for a variety of industry- and research applications.

Note
To run this example, install rllib and either tensorflow or pytorch:
pip install -U "ray[rllib]" tensorflow  # or torch



import gymnasium as gym
from ray.rllib.algorithms.ppo import PPOConfig


# Define your problem using python and Farama-Foundation's gymnasium API:
class SimpleCorridor(gym.Env):
    """Corridor in which an agent must learn to move right to reach the exit.

    ---------------------
    | S | 1 | 2 | 3 | G |   S=start; G=goal; corridor_length=5
    ---------------------


key: chroma:document
string_value:
Possible actions to chose from are: 0=left; 1=right
    Observations are floats indicating the current field index, e.g. 0.0 for
    starting position, 1.0 for the field next to the starting position, etc..
    Rewards are -0.1 for all steps, except when reaching the goal (+1.0).
    """

    def __init__(self, config):
        self.end_pos = config["corridor_length"]
        self.cur_pos = 0
        self.action_space = gym.spaces.Discrete(2)  # left and right
        self.observation_space = gym.spaces.Box(0.0, self.end_pos, shape=(1,))

    def reset(self, *, seed=None, options=None):
        """Resets the episode.

        Returns:
           Initial observation of the new episode and an info dict.
        """
        self.cur_pos = 0
        # Return initial observation.
        return [self.cur_pos], {}

    def step(self, action):
        """Takes a single step in the episode given `action`.


key: chroma:document
string_value:
def step(self, action):
        """Takes a single step in the episode given `action`.

        Returns:
            New observation, reward, terminated-flag, truncated-flag, info-dict (empty).
        """
        # Walk left.
        if action == 0 and self.cur_pos > 0:
            self.cur_pos -= 1
        # Walk right.
        elif action == 1:
            self.cur_pos += 1
        # Set `terminated` flag when end of corridor (goal) reached.
        terminated = self.cur_pos >= self.end_pos
        truncated = False
        # +1 when goal reached, otherwise -1.
        reward = 1.0 if terminated else -0.1
        return [self.cur_pos], reward, terminated, truncated, {}


key: chroma:document
string_value:
# Create an RLlib Algorithm instance from a PPOConfig object.
config = (
    PPOConfig().environment(
        # Env class to use (here: our gym.Env sub-class from above).
        env=SimpleCorridor,
        # Config dict to be passed to our custom env's constructor.
        # Use corridor with 20 fields (including S and G).
        env_config={"corridor_length": 28},
    )
    # Parallelize environment rollouts.
    .rollouts(num_rollout_workers=3)
)
# Construct the actual (PPO) algorithm object from the config.
algo = config.build()

# Train for n iterations and report results (mean episode rewards).
# Since we have to move at least 19 times in the env to reach the goal and
# each move gives us -0.1 reward (except the last move at the end: +1.0),
# we can expect to reach an optimal episode reward of -0.1*18 + 1.0 = -0.8
for i in range(5):
    results = algo.train()
    print(f"Iter: {i}; avg. reward={results['episode_reward_mean']}")


key: chroma:document
string_value:
# Perform inference (action computations) based on given env observations.
# Note that we are using a slightly different env here (len 10 instead of 20),
# however, this should still work as the agent has (hopefully) learned
# to "just always walk right!"
env = SimpleCorridor({"corridor_length": 10})
# Get the initial observation (should be: [0.0] for the starting position).
obs, info = env.reset()
terminated = truncated = False
total_reward = 0.0
# Play one episode.
while not terminated and not truncated:
    # Compute a single action, given the current observation
    # from the environment.
    action = algo.compute_single_action(obs)
    # Apply the computed action in the environment.
    obs, reward, terminated, truncated, info = env.step(action)
    # Sum up rewards for reporting purposes.
    total_reward += reward
# Report results.
print(f"Played 1 episode; total-reward={total_reward}")


Learn more about Ray RLlib


key: chroma:document
string_value:
Learn more about Ray RLlib



Ray Core Quickstart#
Turn functions and classes easily into Ray tasks and actors,
for Python and Java, with simple primitives for building and running distributed applications.


 Core: Parallelizing Functions with Ray Tasks







Python

Note
To run this example install Ray Core:
pip install -U "ray"



Import Ray and and initialize it with ray.init().
Then decorate the function with @ray.remote to declare that you want to run this function remotely.
Lastly, call the function with .remote() instead of calling it normally.
This remote call yields a future, a Ray object reference, that you can then fetch with ray.get.
import ray
ray.init()

@ray.remote
def f(x):
    return x * x

futures = [f.remote(i) for i in range(4)]
print(ray.get(futures)) # [0, 1, 4, 9]





Java

Note
To run this example, add the ray-api and ray-runtime dependencies in your project.


key: chroma:document
string_value:
Java

Note
To run this example, add the ray-api and ray-runtime dependencies in your project.

Use Ray.init to initialize Ray runtime.
Then use Ray.task(...).remote() to convert any Java static method into a Ray task.
The task runs asynchronously in a remote worker process. The remote method returns an ObjectRef,
and you can fetch the actual result with get.
import io.ray.api.ObjectRef;
import io.ray.api.Ray;
import java.util.ArrayList;
import java.util.List;

public class RayDemo {

    public static int square(int x) {
        return x * x;
    }


key: chroma:document
string_value:
public class RayDemo {

    public static int square(int x) {
        return x * x;
    }

    public static void main(String[] args) {
        // Intialize Ray runtime.
        Ray.init();
        List<ObjectRef<Integer>> objectRefList = new ArrayList<>();
        // Invoke the `square` method 4 times remotely as Ray tasks.
        // The tasks will run in parallel in the background.
        for (int i = 0; i < 4; i++) {
            objectRefList.add(Ray.task(RayDemo::square, i).remote());
        }
        // Get the actual results of the tasks.
        System.out.println(Ray.get(objectRefList));  // [0, 1, 4, 9]
    }
}


In the above code block we defined some Ray Tasks. While these are great for stateless operations, sometimes you
must maintain the state of your application. You can do that with Ray Actors.
Learn more about Ray Core





 Core: Parallelizing Classes with Ray Actors


key: chroma:document
string_value:
Core: Parallelizing Classes with Ray Actors




Ray provides actors to allow you to parallelize an instance of a class in Python or Java.
When you instantiate a class that is a Ray actor, Ray will start a remote instance
of that class in the cluster. This actor can then execute remote method calls and
maintain its own internal state.



Python

Note
To run this example install Ray Core:
pip install -U "ray"



import ray
ray.init() # Only call this once.

@ray.remote
class Counter(object):
    def __init__(self):
        self.n = 0

    def increment(self):
        self.n += 1

    def read(self):
        return self.n

counters = [Counter.remote() for i in range(4)]
[c.increment.remote() for c in counters]
futures = [c.read.remote() for c in counters]
print(ray.get(futures)) # [1, 1, 1, 1]





Java

Note
To run this example, add the ray-api and ray-runtime dependencies in your project.


key: chroma:document
string_value:
Java

Note
To run this example, add the ray-api and ray-runtime dependencies in your project.

import io.ray.api.ActorHandle;
import io.ray.api.ObjectRef;
import io.ray.api.Ray;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class RayDemo {

    public static class Counter {

        private int value = 0;

        public void increment() {
            this.value += 1;
        }

        public int read() {
            return this.value;
        }
    }

    public static void main(String[] args) {
        // Intialize Ray runtime.
        Ray.init();
        List<ActorHandle<Counter>> counters = new ArrayList<>();
        // Create 4 actors from the `Counter` class.
        // They will run in remote worker processes.
        for (int i = 0; i < 4; i++) {
            counters.add(Ray.actor(Counter::new).remote());
        }


key: chroma:document
string_value:
// Invoke the `increment` method on each actor.
        // This will send an actor task to each remote actor.
        for (ActorHandle<Counter> counter : counters) {
            counter.task(Counter::increment).remote();
        }
        // Invoke the `read` method on each actor, and print the results.
        List<ObjectRef<Integer>> objectRefList = counters.stream()
            .map(counter -> counter.task(Counter::read).remote())
            .collect(Collectors.toList());
        System.out.println(Ray.get(objectRefList));  // [1, 1, 1, 1]
    }
}


Learn more about Ray Core





Ray Cluster Quickstart#
Deploy your applications on Ray clusters, often with minimal code changes to your existing code.


 Clusters: Launching a Ray Cluster on AWS




Ray programs can run on a single machine, or seamlessly scale to large clusters.
Take this simple example that waits for individual nodes to join the cluster.


example.py




import sys
import time
from collections import Counter


key: chroma:document
string_value:
example.py




import sys
import time
from collections import Counter

import ray


@ray.remote
def get_host_name(x):
    import platform
    import time

    time.sleep(0.01)
    return x + (platform.node(),)


def wait_for_nodes(expected):
    # Wait for all nodes to join the cluster.
    while True:
        num_nodes = len(ray.nodes())
        if num_nodes < expected:
            print(
                "{} nodes have joined so far, waiting for {} more.".format(
                    num_nodes, expected - num_nodes
                )
            )
            sys.stdout.flush()
            time.sleep(1)
        else:
            break


def main():
    wait_for_nodes(4)

    # Check that objects can be transferred from each node to each other node.
    for i in range(10):
        print("Iteration {}".format(i))
        results = [get_host_name.remote(get_host_name.remote(())) for _ in range(100)]
        print(Counter(ray.get(results)))
        sys.stdout.flush()


key: chroma:document
string_value:
print("Success!")
    sys.stdout.flush()
    time.sleep(20)


if __name__ == "__main__":
    ray.init(address="localhost:6379")
    main()



You can also download this example from our GitHub repository.
Go ahead and store it locally in a file called example.py.
To execute this script in the cloud, just download this configuration file,
or copy it here:


cluster.yaml




# An unique identifier for the head node and workers of this cluster.
cluster_name: default

# The maximum number of workers nodes to launch in addition to the head
# node.
max_workers: 2

# The autoscaler will scale up the cluster faster with higher upscaling speed.
# E.g., if the task requires adding more nodes then autoscaler will gradually
# scale up the cluster in chunks of upscaling_speed*currently_running_nodes.
# This number should be > 0.
upscaling_speed: 1.0


key: chroma:document
string_value:
# This executes all commands on all nodes in the docker container,
# and opens all the necessary ports to support the Ray cluster.
# Empty string means disabled.
docker:
    image: "rayproject/ray-ml:latest-gpu" # You can change this to latest-cpu if you don't need GPU support and want a faster startup
    # image: rayproject/ray:latest-cpu   # use this one if you don't need ML dependencies, it's faster to pull
    container_name: "ray_container"
    # If true, pulls latest version of image. Otherwise, `docker run` will only pull the image
    # if no cached version is present.
    pull_before_run: True
    run_options:   # Extra options to pass into "docker run"
        - --ulimit nofile=65536:65536

    # Example of running a GPU head with CPU workers
    # head_image: "rayproject/ray-ml:latest-gpu"
    # Allow Ray to automatically detect GPUs

    # worker_image: "rayproject/ray-ml:latest-cpu"
    # worker_run_options: []


key: chroma:document
string_value:
# worker_image: "rayproject/ray-ml:latest-cpu"
    # worker_run_options: []

# If a node is idle for this many minutes, it will be removed.
idle_timeout_minutes: 5

# Cloud-provider specific configuration.
provider:
    type: aws
    region: us-west-2
    # Availability zone(s), comma-separated, that nodes may be launched in.
    # Nodes will be launched in the first listed availability zone and will
    # be tried in the subsequent availability zones if launching fails.
    availability_zone: us-west-2a,us-west-2b
    # Whether to allow node reuse. If set to False, nodes will be terminated
    # instead of stopped.
    cache_stopped_nodes: True # If not present, the default is True.


key: chroma:document
string_value:
# How Ray will authenticate with newly launched nodes.
auth:
    ssh_user: ubuntu
# By default Ray creates a new private keypair, but you can also use your own.
# If you do so, make sure to also set "KeyName" in the head and worker node
# configurations below.
#    ssh_private_key: /path/to/your/key.pem


key: chroma:document
string_value:
# Tell the autoscaler the allowed node types and the resources they provide.
# The key is the name of the node type, which is just for debugging purposes.
# The node config specifies the launch config and physical instance type.
available_node_types:
    ray.head.default:
        # The node type's CPU and GPU resources are auto-detected based on AWS instance type.
        # If desired, you can override the autodetected CPU and GPU resources advertised to the autoscaler.
        # You can also set custom resources.
        # For example, to mark a node type as having 1 CPU, 1 GPU, and 5 units of a resource called "custom", set
        # resources: {"CPU": 1, "GPU": 1, "custom": 5}
        resources: {}
        # Provider-specific config for this node type, e.g. instance type. By default
        # Ray will auto-configure unspecified fields such as SubnetId and KeyName.
        # For more documentation on available fields, see:


key: chroma:document
string_value:
# For more documentation on available fields, see:
        # http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.ServiceResource.create_instances
        node_config:
            InstanceType: m5.large
            # Default AMI for us-west-2.
            # Check https://github.com/ray-project/ray/blob/master/python/ray/autoscaler/_private/aws/config.py
            # for default images for other zones.
            ImageId: ami-0387d929287ab193e
            # You can provision additional disk space with a conf as follows
            BlockDeviceMappings:
                - DeviceName: /dev/sda1
                  Ebs:
                      VolumeSize: 140
                      VolumeType: gp3
            # Additional options in the boto docs.
    ray.worker.default:
        # The minimum number of worker nodes of this type to launch.
        # This number should be >= 0.
        min_workers: 1
        # The maximum number of worker nodes of this type to launch.


key: chroma:document
string_value:
min_workers: 1
        # The maximum number of worker nodes of this type to launch.
        # This takes precedence over min_workers.
        max_workers: 2
        # The node type's CPU and GPU resources are auto-detected based on AWS instance type.
        # If desired, you can override the autodetected CPU and GPU resources advertised to the autoscaler.
        # You can also set custom resources.
        # For example, to mark a node type as having 1 CPU, 1 GPU, and 5 units of a resource called "custom", set
        # resources: {"CPU": 1, "GPU": 1, "custom": 5}
        resources: {}
        # Provider-specific config for this node type, e.g. instance type. By default
        # Ray will auto-configure unspecified fields such as SubnetId and KeyName.
        # For more documentation on available fields, see:
        # http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.ServiceResource.create_instances
        node_config:
            InstanceType: m5.large


key: chroma:document
string_value:
node_config:
            InstanceType: m5.large
            # Default AMI for us-west-2.
            # Check https://github.com/ray-project/ray/blob/master/python/ray/autoscaler/_private/aws/config.py
            # for default images for other zones.
            ImageId: ami-0387d929287ab193e
            # Run workers on spot by default. Comment this out to use on-demand.
            # NOTE: If relying on spot instances, it is best to specify multiple different instance
            # types to avoid interruption when one instance type is experiencing heightened demand.
            # Demand information can be found at https://aws.amazon.com/ec2/spot/instance-advisor/
            InstanceMarketOptions:
                MarketType: spot
                # Additional options can be found in the boto docs, e.g.
                #   SpotOptions:
                #       MaxPrice: MAX_HOURLY_PRICE
            # Additional options in the boto docs.


key: chroma:document
string_value:
# Specify the node type of the head node (as configured above).
head_node_type: ray.head.default

# Files or directories to copy to the head and worker nodes. The format is a
# dictionary from REMOTE_PATH: LOCAL_PATH, e.g.
file_mounts: {
#    "/path1/on/remote/machine": "/path1/on/local/machine",
#    "/path2/on/remote/machine": "/path2/on/local/machine",
}

# Files or directories to copy from the head node to the worker nodes. The format is a
# list of paths. The same path on the head node will be copied to the worker node.
# This behavior is a subset of the file_mounts behavior. In the vast majority of cases
# you should just use file_mounts. Only use this if you know what you're doing!
cluster_synced_files: []

# Whether changes to directories in file_mounts or cluster_synced_files in the head node
# should sync to the worker node continuously
file_mounts_sync_continuously: False


key: chroma:document
string_value:
# Patterns for files to exclude when running rsync up or rsync down
rsync_exclude:
    - "**/.git"
    - "**/.git/**"

# Pattern files to use for filtering out files when running rsync up or rsync down. The file is searched for
# in the source directory and recursively through all subdirectories. For example, if .gitignore is provided
# as a value, the behavior will match git's behavior for finding and using .gitignore files.
rsync_filter:
    - ".gitignore"

# List of commands that will be run before `setup_commands`. If docker is
# enabled, these commands will run outside the container and before docker
# is setup.
initialization_commands: []


key: chroma:document
string_value:
# List of shell commands to run to set up nodes.
setup_commands: []
    # Note: if you're developing Ray, you probably want to create a Docker image that
    # has your Ray repo pre-cloned. Then, you can replace the pip installs
    # below with a git checkout <your_sha> (and possibly a recompile).
    # To run the nightly version of ray (as opposed to the latest), either use a rayproject docker image
    # that has the "nightly" (e.g. "rayproject/ray-ml:nightly-gpu") or uncomment the following line:
    # - pip install -U "ray[default] @ https://s3-us-west-2.amazonaws.com/ray-wheels/latest/ray-3.0.0.dev0-cp37-cp37m-manylinux2014_x86_64.whl"

# Custom commands that will be run on the head node after common setup.
head_setup_commands: []

# Custom commands that will be run on worker nodes after common setup.
worker_setup_commands: []


key: chroma:document
string_value:
# Custom commands that will be run on worker nodes after common setup.
worker_setup_commands: []

# Command to start ray on the head node. You don't need to change this.
head_start_ray_commands:
    - ray stop
    - ray start --head --port=6379 --object-manager-port=8076 --autoscaling-config=~/ray_bootstrap_config.yaml --dashboard-host=0.0.0.0

# Command to start ray on worker nodes. You don't need to change this.
worker_start_ray_commands:
    - ray stop
    - ray start --address=$RAY_HEAD_IP:6379 --object-manager-port=8076



Assuming you have stored this configuration in a file called cluster.yaml, you can now launch an AWS cluster as follows:
ray submit cluster.yaml example.py --start


Learn more about launching Ray Clusters



Debugging and Monitoring Quickstart#
Use built-in observability tools to monitor and debug Ray applications and clusters.


 Ray Dashboard: Web GUI to monitor and debug Ray


key: chroma:document
string_value:
Ray Dashboard: Web GUI to monitor and debug Ray




Ray dashboard provides a visual interface that displays real-time system metrics, node-level resource monitoring, job profiling, and task visualizations. The dashboard is designed to help users understand the performance of their Ray applications and identify potential issues.


Note
To get started with the dashboard, install the default installation as follows:
pip install -U "ray[default]"



Access the dashboard through the default URL, http://localhost:8265.
Learn more about Ray Dashboard



 Ray State APIs: CLI to access cluster states




Ray state APIs allow users to conveniently access the current state (snapshot) of Ray through CLI or Python SDK.

Note
To get started with the state API, install the default installation as follows:
pip install -U "ray[default]"



Run the following code.
    import ray
    import time

    ray.init(num_cpus=4)


key: chroma:document
string_value:
Run the following code.
    import ray
    import time

    ray.init(num_cpus=4)

    @ray.remote
    def task_running_300_seconds():
        print("Start!")
        time.sleep(300)

    @ray.remote
    class Actor:
        def __init__(self):
            print("Actor created")

    # Create 2 tasks
    tasks = [task_running_300_seconds.remote() for _ in range(2)]

    # Create 2 actors
    actors = [Actor.remote() for _ in range(2)]

    ray.get(tasks)


See the summarized statistics of Ray tasks using ray summary tasks.
    ray summary tasks


    ======== Tasks Summary: 2022-07-22 08:54:38.332537 ========
    Stats:
    ------------------------------------
    total_actor_scheduled: 2
    total_actor_tasks: 0
    total_tasks: 2


key: chroma:document
string_value:
Table (group by func_name):
    ------------------------------------
        FUNC_OR_CLASS_NAME        STATE_COUNTS    TYPE
    0   task_running_300_seconds  RUNNING: 2      NORMAL_TASK
    1   Actor.__init__            FINISHED: 2     ACTOR_CREATION_TASK


Learn more about Ray State APIs




Learn More#
Here are some talks, papers, and press coverage involving Ray and its libraries.
Please raise an issue if any of the below links are broken, or if you’d like to add your own talk!

Blog and Press#


key: chroma:document
string_value:
Blog and Press#

Modern Parallel and Distributed Python: A Quick Tutorial on Ray
Why Every Python Developer Will Love Ray
Ray: A Distributed System for AI (BAIR)
10x Faster Parallel Python Without Python Multiprocessing
Implementing A Parameter Server in 15 Lines of Python with Ray
Ray Distributed AI Framework Curriculum
RayOnSpark: Running Emerging AI Applications on Big Data Clusters with Ray and Analytics Zoo
First user tips for Ray
Tune: a Python library for fast hyperparameter tuning at any scale
Cutting edge hyperparameter tuning with Ray Tune
New Library Targets High Speed Reinforcement Learning
Scaling Multi Agent Reinforcement Learning
Functional RL with Keras and Tensorflow Eager
How to Speed up Pandas by 4x with one line of code
Quick Tip – Speed up Pandas using Modin
Ray Blog



Talks (Videos)#


key: chroma:document
string_value:
Talks (Videos)#

Unifying Large Scale Data Preprocessing and Machine Learning Pipelines with Ray Data | PyData 2021 (slides)
Programming at any Scale with Ray | SF Python Meetup Sept 2019
Ray for Reinforcement Learning | Data Council 2019
Scaling Interactive Pandas Workflows with Modin
Ray: A Distributed Execution Framework for AI | SciPy 2018
Ray: A Cluster Computing Engine for Reinforcement Learning Applications | Spark Summit
RLlib: Ray Reinforcement Learning Library | RISECamp 2018
Enabling Composition in Distributed Reinforcement Learning | Spark Summit 2018
Tune: Distributed Hyperparameter Search | RISECamp 2018



Slides#

Talk given at UC Berkeley DS100
Talk given in October 2019
Talk given at RISECamp 2019



Papers#

Ray 2.0 Architecture whitepaper
Ray 1.0 Architecture whitepaper (old)
Exoshuffle: large-scale data shuffle in Ray
RLlib paper
RLlib flow paper
Tune paper
Ray paper (old)
Ray HotOS paper (old)











previous
Overview




next
Installing Ray


key: chroma:document
string_value:
previous
Overview




next
Installing Ray











Thanks for the feedback!


Was this helpful?




Yes





No



Feedback

Submit


  
    By The Ray Team
  
      © Copyright 2023, The Ray Team.


key: chroma:document
string_value:
wOF2+D
x*�K?FFTM`�j
��\��|6$�t�| ��<[��qE�6
^�t�ı\^wg3��B/bM�8fl�������G�/��5�����!Ɍ���"R!���� o�LA����.���rVM�[�J���*O�k�l[�+X}�z>��܌#�hz�
�!y�f�]��Y^`�+)@w,�����	6�B-S���ve�1�^����f���n�J������+����3J�}߅5=�Ԅ}|�_�ڇ�K�>�eX��w}�c�)�?�@9�⟿��������-��g���ٻ-�1&�p���lױ��)ýD��6����t���,i{�$)-�
œ��S14El�贈O��Ta�̍����[�/��`I�FŒ�Y�%�@F��R`Db`��UwF���W
���������W�5*}�sL�L���;<�6��QW��5y�qp�w��-G� ��e���FOŨM��ћk��i/u�rk�ߵ��՝�d'9I�vuW^x��:;F���
	5B��rԬ?�͐3CD���_�ట���g��!P�@�1�4N|�������t��zOv�r`	
�p���\���^��
q�O���_���\�]�g_�o�tf����y�_t�vk�4b+ �N�E4��}�7w��y�A���4�櫥�ջ���,8q��m����76��&��}��h���N��+fX���׉cs���{g���i�t���nЀI�!r<���3^��ly	��ս�A��������_���q�OGuW-�P�H
j��S��k?4,�i<;	+:~�U�


key: chroma:document
string_value:
��Eٛ���k�}U����S�	%sL�� ��3'��{���BAKm(hDq�,��1�K����}�UbY @6BZf}
�1����{��ʛJ��j�C�*��ؙ@���\Ve|3�Y��=�%�Ri��{w�us~=>�W�&H*À��0��v�0��*�8�R̾�W@="���6P�w�(�];
����p�Ш���F@l�w$祶��|�������-�����~��/��*l��#����j��+�K�V�*����2Lu��2g���I�GP�E }9�+��B�=RrZ�S^��I)(;�'L ���+��\SJ��K)m+}X2�`����!�te���s��JV{=
�qD�O�!jjrZ��U�j)O�/z�R�\�e_ѥ�ܢ�������(!HRJ#��G([d/�I����g�/�r�IiF$�hOX�M���r�]��G��Z)�H�y����&->�%��6�݋���oSm�i�J}��3�,����,
�L��XkEĆ�t�4�Ώ�_�`����s�l���0J��&�2@$���~,�f/��1e����6�k�$�KN`���~�:��KYvx�L�'�֊]U->d�%
q @`��k@�k<��E�V���
[(��=�/jY�ܟ�����0s��������=�y����D�����������`[�n�Ǣ�W�JS���Zu��Vuh���DK�B��_G5���K��5�������*�V5�MAZ-�V�����JȠ�f�t��3�k��&9�Y���=�7�G��&�<̘]�R�^��L�Լ���ﺪ�ZQ�kC���u���T]���Z��^�������~�O�{F��3���t��y�#���>�3��[~�#d�Ǌ�n�����r�g5y�vFM�L�Ҡ��Fڵ@�He�R��˚��F�ǵG�u^W�Bo�!�C�+uFLwNT(�
kt�P,���1v�+���q�b�h�?�FX�Jֱ'�����z�'���^���][v�x�/


key: chroma:document
string_value:
kt�P,���1v�+���q�b�h�?�FX�Jֱ'�����z�'���^���][v�x�/
����+g��{�㰼r=���.�J��:��Ꚗ����n[m��&묵ژ�,4dP�N34*V�@
3=_Yi�|����#��o����ʥ���V�}��طe����"Obo���8��7���ו�x)�ѡM��#�m[[_W��TVI!��؃M��^��:�*ʢ�e��M����3s��9L9eP������I]�ޥ�R���T�����/��.��MH�U���_~�&�?�w����X���}%Ƅ��(`��
��x5V4g�N�K�4�]��v����|���#����[��d�G�R+���(�	����	�HG��h�b����f���]� u&v�$�̨����1x�8ܣ+V�E�a(J��p�W�t�*�Ũ��Ը=2����TDy6�M�n�-q�j�0~ؚ
(vl��ca�kV��8yC�e�Da����{��?���bx��eQ�VmN�K��)@�m��Q�!��dD�a��� ���1���h-;T&��Xf�R�
�jjI�_0fe�N7��6�O��E��'4������%���3�����'=j��BU�U�$gP1 ��
7P�:��+3a���6_��f�ٝT�D�|�}b_x^�D^��]23lN����$fB�3X�y}H���^


key: chroma:document
string_value:
�|��E{)��F��Zjg.'��&r����be���M���ْHѹx���n��5@q X���6lh$y~��>enL�KG��$��DZ2d�I؜�:�`��Ǌ���y�	���S�G���瓅�h��{'M7�5уe.��hߒ��-�ŻF�}F�h�V�Y���0J�$޿�����d!�`u}��$4�~H�ǝ�=��w�M����\Vlcb���2�/E��!�J �d�}1N�,!|�:�d*����T�,�ih�y7i�Y:��3E����RG���o��ŰT�aV�.Qj��;E�	j�~�G�m�R���*�G���k��,��CY$�e���G�0�h6���;=Z���%�s�œ|��"Φ@��]�n��?/r����n�-2|.3��%].�]�����6��p�]�I.�d}9�kDꌛU��"O��H�\,7G�s`n <��������t=������D�K���&����*ɈM/D
k]4t�~���H&�3��U���k��j���,g/D��Ug���Ʀ?�����Ǝ�S��4�H��~��?�Q�	��ҋR�>N�zg3wÜ�AbY߶�#ٮ^%�mHO9�����+��}Q��:�.:�.7|����n0H�W��c�*��TI��j�]��Y?�'�*�	z6���mi���GM:���b��V�%��a�b�����Vz&�1�� ����;ˁo����QH�lϝ���R\O����'�D83�P/��̝�w��J���CY����{	�����������Z���V�(c�2�����'��/L��ë�1��em�@�6]8�>2�ߪZ���E�"��hU�"��l�@n�QS.�ذerմe�X�,G^��v<��Dj�Ƴ�X["��N�����
��mp��dv�����2tk��&��>J�ې5�0�������o��)d�|�K�r��[ef�;%OS���Q�����t��9��/���%


key: chroma:document
string_value:
S�"�ŶoK����¾:�
h�;a���d���W���.���LU�2�]�����g1n��\I֟+˴�W;�ݓ�ΤI��A��_:Z�t���m�eoO&O��IX�fy�um�͖�~9thT=gt�����t8��Ji�T�$@���nK�DB���^�F�M'h4�k��X0sL�%$\-�����������)O�������ҚE_�8��˸㏧>��Q�ҷm�L��}�������'�y:,i=��쌩
)g-1э�C��r,B�}�?~����� �1�ъQ%�ԤH�0K_U�1��3Z�+���M߃
�W�泅q��A���d�93�jX��~Bdk��ѭAGB��!>���@����I�3,��x�̢�M�T��F����J2�B�e��a����Q$�qƤKp�m�y%� �e�In;�n(M����!����z�
��,e�4yZ!Pd�N:�b�)�w`#a]��\�l���jgl�\���JM��wTǇ�ƙ�j͉�!��1?�b9��{B��*R�:V��~� �\�>^�n^8�utZ�����n緫>��Qw��^��*��Y�����X_x�X�������[�L.g�˦҆=�#�z8��,�z�x�k���<('�"��(1�����|��{}嬔7�]>W���[��e&�~O�ΝƄw����7�=�C|��qM��fg�R���s_�w��i@L����׀T��LE>�{��j�X1�a]���U���*m�m�'oU��7ű�sX�������z�K.�M�&�O)l�Ԧ-$ǋ�`��W�Z�߾�B�:;��W��d?�X�j�kT?3����]�5eZ���5g��BZ��k� �WhOz�w=՚��z�B�.dG^h�ͼ�S��a���n�Fh��7����ޕ��Z
u�(?��r!��N��2GBa0�
�M7���u�_�4��_�F�
Ƚұ�k�f���"��
�� w�6�:�*�^�3���JJ	dd���Hs4���h�


key: chroma:document
string_value:
�� w�6�:�*�^�3���JJ	dd���Hs4���h�
����wK�c��[~52����Ï��1���a|/�]y"q�O��o]�&Q��7L��A��ŭ��?rGU����v�Y��2I"	��"��(�#(5�y;M���7�^I߳����Cz1��+R|�O�{�
0���:ş��t#�F���#�9>L:�+	t������H��@�k�R�H��������k�.�����DiN\oDa�#�D�ߞ��C$y�;U[����@,LΗxw8�� �FN$��;�F�47�"	��d�"���%��%]�*�3E_R�4y-0�����,4JĢ�1�D%���(�Ԫ���2���c,�6?��Z�3=V��[�UK�ËCHA6��B`��JUTi����q�T�ZZ1D���,�Si� @)G$��ɾ��	�hJ��8*�⭧��8 �(�ݝ�3�EE�a������
i���
�3�&���,��Z��Js�QmpQ����LQ]4����ĵ�D�Z,O�w,"�#<_s�y#���|"�&���W��b��1L�������Hg3^<$��#6v�,���#˨�/�X1��	�K�R���s%J��jm�7֓����o�jl"}������ "�����ѽ�O/t������uQt��^钻���~|��������S�4i��`u�����a7�=�
�@�0u���/4�����=<�2a�т�Bo��zJ���mcɭ�C)]�� :��
[]�+UZ��y�R�z��7�eٶ��QE�-d���������cV	�ͺ�=�z.�Jx`D��D��o�aFK��}�
�
�2�SK�
�k^��j�Ʒj`�S�� �po�\,_��9D#�=��Dj��Zq81}���������v��ִ��I�f:�?��Qd�J|����N��^���B�tr�v�<��`\_��"i�$1裉�:�O��q��B��d>}J�Ss�����ʻ/�g�&��0�I��)(�D;���!�sd


key: chroma:document
string_value:
��{69����hUŶ�<X_̠S��6H��e=8$�p`u)�G���s���w��Ò�5%�=tǉ�?B�@dt�T+H8�ڱmwOz�"���]����{�l�@�Y�{M�A�F�s�{Nka/����k8Pm��GZ �8���A���ĚZ�Ң�F�$�,^i~$�s�١r����I���s�Ӓ.�B�޴���Y��>�w�����1I�x���0�VԴ�a�7y"Y�����B>?�T�,1���Ýs�v(��������������d�����#	lV^����iQ8�T���4���k�}�Q����Z�/�:b��66m������}Ğ�[�gU�X��w��Q�����C�G�]ANV�0�����חtv�[ �ZR2<����h�D�f��=����)gV��z:;S���*8��q+�V/�
����u+�X4h�����(}�S%�N�CZJ�����L�6���$$�m�3�y�/��֗	5���fV�F}�;!,B8��H>X��J�X@��*�{��NyXs�l޶U�>�עTA��� ֎�)�G�����^ۗ\�����958,���`<4�O�s


key: chroma:document
string_value:
w�G�,���k?�\�n���-�zs%C����4��<1���̳�[rT�pAP�v����mك"ᥤ�g��T���PV���^��?�<�h�X�v��7a������
!Ҁx%��.�]�FT��HG�����>xc]�!q�G���ET9p���?��ѝ�^|l��
{�bcr0*��*٦����?�d���g�.�ǵE��Zn�����^Q���7�j��2���-(RH���Eg��@���#9]�}[D<�S(�UX�<$N����k�����%�%�X�6f��;qz�T˔&�c��}fB�7۟{�\�t��9ό����\/��j:�֒ �F�c�=�?��樵�i�eT���I
��Y�Y3ĩ4qg+Xp���>�ƙh�K��9o�i�� "O��v��@�dp�SK�
L@��C&Jha� �8Al�"��X����?�����f���C��o=["��I���R�)s�Η��)%N��]�����̎l�:VT�����r[��=�~A��4��8��b��o�L/"p���`�9�d����*M�c�R��f���Ԓ�i�kⴞ&�h:[y�|��]��e$���M�;~kt�y����h�*m�M@���:�-@�%��փ&J3��2���
�Q��A�B�V��@�)��`���C��&:�
kã_���h:��hV�*-�ܓ���Z���B%֩\�+h���^�K��3j#�	Ue�53�G�$99��<,&b~�`�s�)�y����g�PI�W0!�0G0�N�~�iE�a*��SȊ����B%�(�nC���h��ٷ��L��.�(z*{U���
2�ޡt������


key: chroma:document
string_value:
�O+�Zf�2��l�xZ_
�����!���NUQ��uZ)Ə�x�ĥ���܈R\`՜�sX�2��ߧ�S�WЋ
�g�Q^�N-Evڏ����δ^~o5p��e�9b#4R	s�l�+&��Q3��4Υv��c:����1f�ٚ��hd�a1�d��c3�ey(��U]������jvɽҝ��[u�d�*Xr���NK��8���3�c�|Z��Z�[��/v���V����|�	���nk?ӄ��
�U�]����﵌�t�jay{�[�\��%��uCM�N�l�U���{"��IUg�W�
t%�L��F�Aʏw"
vv�7��6���[	�>����s
Ȳ������+�Ea��P�HR��m�����+uSʼ�	I$��C�P�E��$��#ɬy
v,���A���lQ;A�s�Am�gH��H�q,��E��_���*T
,�%<P@w����5�i����ȸ<�I�z_)8�!�Qc����6�8�aL:񳟠͎�IyA���Ú��s��%na��k�}G�n��͘#��)N
�o-�wo����}�4�������'X�n��G���"^�!��dU����ǃ�3��^~��s�����J����d�w��ޚ�ǰ��MB��Y԰U���d ���t��o�������=�����w��ͦ��g{jm@�,A��]�Cl�c���S*�(��f�Ş��ch \��$�>%c���T�z�s�X��HGH�+�p"ՊV�������ǋ��&�����I��2a�p*���='J�;����,�K��ٌ·�R"��pz�*�ׁ��D���BN1U��ӻO?n�d�
)��@��0΍@�/L�ot�����ڏ��W���b
:X�}4ށ(1]���J�U9�(����2�<1�Yj����B�oki5I�z�'M�3H��P��Ƙ������*3�I� �%1�$���t'�Z�S49��aS�碩��'�'@�T��Z?ܤ#[�K�"�}�4.ӼĤ�Wo��:E�ɰ���_�G�


key: chroma:document
string_value:
�*t�.q��\ʸ@�1F��ƺ��ḋ�q�W�4�;Q�3���v�#�F6�\+�zބt�H��i�qi�+  MCV2K- s�7��m/1p�Յj�?�<���0tZ����Π�?}�����4hvCu��[��uۂ�H�ࢫ	�h��O�bEK��r��7/������̝ٵo���[k�K���ӣ�b���B�TǒN���Ƿ�bF~K6��ZD��Qv��'s����?ee���`s&c *-��uR��V���<܁�iS����i�V���⣘9������H�M/e�T���/?b������߿�E�q;�g�=P�qt���+eO� ��m���-�E�\4��Z�}G�E۹5y�T��z��d�f�˼�K�Jq=�Uɱ+y����Q6���0�l�ϝ؋��F���IB%��WS���(KĻ���!P��i)��ZK���[�^v?
L�˂�r"Vfr�z�	�C0O'��N;r���WA�,���>٩u��G�����v�PsK&T/��T�����\�֓P)�X|/	HaQ��p��R9��硫��S���e��6,o�Y����']/���w��u���0�{��1�4��L��	�d=@��a�ď�wh`g����A���X���U�$�8�)8jM%Kj&(b�&AXy���r�>j�)244 �Hy�ި�>^�#�H�{L�n���c����C����e��e�6	��W���jn�Tsk��	�ׇ���|�P���Gs�������^7޺cɾ�;��`5�[�f?�f�=�T�xa���n_\O��+Mg��y�T�~[,�f��
>����L�=ug�����Wk�)C���F�RL���S	L��aIѸM+��F$


key: chroma:document
string_value:
|�'[p$�fpK�^��6켊��ipF��Jw}4g�Vk�&�A��$����=i|`Rv����oObESSx���ON���~N���lsO�5�yS�>����E�,�1��������_D��R�H���w�:��??~t"V'�JN�}&R�h�ꤷ�����碝��$�|�.�y VdT[}��_$�,�s��V�D�}{��a${����]�.�(��&m�M��F����Rᬖx��"Y]�� ��Y6&�萝ٞ炴*�_����%ۼ|�1fYb��]�l&�R�|�¯����K�N�e��4��A=�X�XL&O�@�����ld~i��̟ч�e���q?�ײy��)?�M#��^��AZq�


key: chroma:document
string_value:
WlF_4AN�}9��x59n:�+>�C}����>*
�R�υ������i�WKwD�?@�hX7_�=�ť���+��	���4@���;{zqhc�C�@.�|M�-;fEʡBو�/�6�m�8}�8RRu]���ֈ��@��Ϯ'��T/�sƚ��>ցP�ٌI�Y�.�ԏ�U~?��
0ue�;�!8.���1w�Ոg�<��4�o#4֍8O�9aK���e��꛽���=<�c���{*9����<�/�MC<0��y8:�kM�׸��s(���[~�	܍NSx{���@��o?�X�+�w��Z�)��߆����A����#�[�VJ�M�_tW��}�5�|��
��c�t�YLg�];�>9`g�^2!�a�}�Zk�����.~K


key: chroma:document
string_value:
ϛ>��6���b'+���K���QϏN���!�ۤ�w���7��̐c{�\�7R#�;�@Mc��z�E��q�{��e$�1�jO�wv�mU�UY�5�併�Eĵ�km$�O��g��O�Ҷ�w9�j�!��ѿߛ�#ש1oQ�zs&޽ d|=�@���sp�w�+Ans?�Ԙ�aa���F��t]���VC��o���Vw^�τ�n�AO��MCipx��!���'�9ƻ���^�2���o�k����z�U+m��4;C=<��ʲ���Y.���Jnn��I+�$7�ZFO�ּ�$�1��4��_����I��μ�&�`���4���Y�%aq�Ǽe�2�[�:�&��4A��M�yĜ^��aXxd�W0SQMIG����b��:I���z�+HrIJ�3j�±�s��  ���d�Z�;
.F�JXF�Y����L�ZL,���m�,�`b�ή�%��h!P9��[�,�VD��.t	���,I������b���,��ǍB��}����l)-?�@BGpK��'Iz$��A-ǟ���wz��)�����>�J�9?�j7U��R�J��s�kt�0[��R��1�x�k�Z?����K��8�B�.�"�2�ٰ�Sz�V�xm�ލlf�G���+�(�an������
�x���%/O�`���'�W�P�A�a�1�7s����%'
ҋ=Zɵ�iIxG?��Ye3E号�!���e���w�D���!m���Ǵn}�8R!�!��
�Q��[.F��T��l���)�Sr���{�N��׶D��}S�ڴu��u��<�L���ݶ|


key: chroma:document
string_value:
�Q��[.F��T��l���)�Sr���{�N��׶D��}S�ڴu��u��<�L���ݶ|
�U��Xu�U)��?y�"	�����fv�Ӻ$G0Oq_���d����h�۝F�c�`����b�]�[��z�Up�u젞���t��$���DL֪q��(a�ӦȆ:��M�z��:+��;8��k	/bI�LW��/#eұ>�8}g�=af��'�_���������(���<�ڢq�� *O?�;����6���Q���,�a	q��(!�U
[ ǫqװ�H��RLÚ�:�ϣ�������,�wڮLW��}�΄�e�bH�Bm���}#�R��b��!g��_@��DN6S�da��'��v:%&{���IE����%�]��w������u�ƕ>�rq�p@*�c���=Z��ߙ�I�N$U�j,}m0S��Q�|��_�|�+I֋d&~SÄ�L�ۭ����a�Nֆ�hMF�l�q����7�-�B�kʿ��{~I�
US����Z�b���0Z�T0����@������>r����Ϥ�\#JJ!��,S�T�"I�r��c�Y��&gI���,�����Z�3@
'{����h>�б�番}TF�Al����M7�DÒqS� �Vb#���J��w|Oq�(�Ru���Ƣ�Oy����=�a���T|�S�*t��1NU�Խt?�W��.]�D��Ƹx�r{�d"�� ���]Ή��ߐ�����&�S������,P!��-


key: chroma:document
string_value:
�j��d��L��r��˦��;���`+��I!���fFKS�����u���N��,g~�����q��F	~�^?�|q:ڔ�I����0��c)��?Ky3��Y:V�7oLg~ER���I�7���Ӝl��#Pqc!��F��e��y��ch5�4�$�j(KvE���{��:O��8(���9��K.�H[)�Þ���]w�<���O�f��mCFve��)�I��xػ+��KJ<2���aؗ*��5j��|c�j��~��	�R��#r3�)�x|�Gy�!��C�6˶m�Y�c�=d��,���X�)��ȭ��-o�DFp.��g�rC1B��ٳ#3\����*���.'٥I�GՓ�x@����U��B&��������u����9tz����_�8� ��?��|�ń����Qw�3��"���o�&��!K�����_$��g��^>@t!�����+-�>���*�s����W�|�e��nj�F�{.�;�y���hs��=k�E��C����c��a_�f��S�h�R�*��:a_3\��hC7 [^�8$z�>�Ch���,W/�s�ђ�-�s���a�C�fE2�c�j�G|�ک�[I���U��;EC��қň�G#�ߙ�\�p �9��|w�pl��i+�m��V�y�pnH���SAh�1�D�H�2�Up�.�Q�6�Jʄ6��4��_����<�	J��&��


key: chroma:document
string_value:
�9��|w�pl��i+�m��V�y�pnH���SAh�1�D�H�2�Up�.�Q�6�Jʄ6��4��_����<�	J��&�� Eփ�SX1�s�h��
ܶ8R�&5�S#HW4��y���sFN[���l�(mM_O����J���&�]�q�KR1-ށ2S-�ݫ��4�Be����D��������9q��5�,vr4���V���S�8ˉ����C�Z�������ʋX����F����c�Yݕo���J��cB�	����v�0���8<�*��0O7�VV��|���B��V�W��a��X}�m��W]�-�}+woŘg��Ń6��&w���b&�[��l4��D���w�xX�J郺G3!WT>�֎T%7��0���n�W�/�Q�⑊��r��(��CT�s���	���98���v8R�ʂ��>���w�	�V�:���D�o�h%��0���=,�E��ֆF,{��{�T[��,��yhת͝�t(!��È��v&I0�%Л�}�;��V ���1Ǉ��:�?�Ֆ�


key: chroma:document
string_value:
��EJɚ�F�%aޯ�5ޏ�aW�Y�HF�7Y�r��a~�37Oi^D������B�QhcY����t[�
mYB`a;ɠB�)�{]��2HP%/Ϧ��2��Pћs�����	�"*�x�/�����0L�ƍ(Ȍ�4[+-`a%�R�ڵ��E�� ��DP��Q��9��j��	p��V 5t�9	%P'�N�E�CD����0��J���2u6oa{���@ci�ރ(��$�ox�}�r��I�`7ٮ�X�
��8
6Jn����ym�S/l�T�<�5ʯ�� _����,�y��5�9о{;�~bq��n�00�4�k�u
Cb�WI��K�U~�*&!��*�Oy���SeIO��m�A��;:�j�NziG������W>�s�DN-����s<�<?���OO,U���}�bD:�f�-���9�F���^!dā���@�,�'7�giб;X-|?�O���[$D��Tس̻����Z�~xO�g�����������\���x�g]%&���^��]�&1����c��Gк�tb�+���p�bœ;���]���p���������`��f��D�O!8
l�ki4��@��&-uItp2�57	�s��l�?
:X�5q���ƈ	,�}�j^Ki��c�A�I�D��lW6X][���~�a@z�$+����L�2Ŝ��BqnӨ?�l���o���"@����m�[\�k���<�!�NM*�d�4���d��f�	c����X�F���u��kr���"6:�q��� ��N�A.`�iE��0)��NWG���1����V�wb*��X�����c&w��|R^�U8��X��wls�O����g}A�#�0�����cW\��o���3l���y+�ź���d9t!�JA,%v�_�~lP0%`��eA+tK �)���
D'#�"ت�Ln,�>��#�/��0�2LU�V�tQ�����I�$&"���$����WԳq�@a��s�H�v6,


key: chroma:document
string_value:
D'#�"ت�Ln,�>��#�/��0�2LU�V�tQ�����I�$&"���$����WԳq�@a��s�H�v6,
�(�ʇ��p��_-��v�R�J�ƞw��n�Wd�_g��#i�&�ȠrJ�QM���2I�'�7ߺ���d���i��Tcr.���"���KrS�~���y�n�`���[��
v۵�\�`�}(u�>AT��˳=���q�9��lj�2���x31h�L R�!T��2G)X��&Б


key: chroma:document
string_value:
v۵�\�`�}(u�>AT��˳=���q�9��lj�2���x31h�L R�!T��2G)X��&Б
�y��f  �U��C+UZ\i�VҴer��_o����z�lY��B�A�*(9���sGH�%g��������TO�Z��R>����zQd��k�ZM+�IY�T�j$c�D��>
0���Mw�-��Z�A�bZ��[}]����M:��FK	�$F��l��G�d���"�d-���Hk~3��i����@A��ɲ�'-!���Y���#Hy�e;��@�	')��À)Է$��x�}�����R��r�iQ�����Y@��en\��SÔҮR�I,�8x����u�V
Áfx�LbA����E�.n*H@D�8L�j��T�'�@�q��m�����Л0j!tZ�Uf�����7V�L2�/�q� �zw�V�;�?э�D\�d=�ĨA.�!���eͅe�|�0ܬ�ѪgN�%^�&�����NN:]&|�Ґ�M~��!�@x�$h��TZ�D�-�����1�CI�ɜI��Dt��\
˸ʪL���s:���u�x)���X=�is��ƴ�r�O���y�۪H��9�ن��mQi�w���9s��2�T�d���Ϲ􍸹'-��D�k�� <j�j�����s��du�Z%Q���X��d�`���B����aQ��#��C��r�1l�l�2�Ɣr��4u$l8g*+��qEdU��I�������B�,�E��E��x9�ۇ�V޺z8M�$ v�[�J#��:�~E�Q�;�$>�	Ɗ��U2��o�P�݅�rE���������c�|����r�G�U�6��뫩85�7�JJ��r�-�*���z�I���o
�M$�|��U~x�������%��#z��J����ڍ��"f^^��
��
��-�)}�>�h�w�,;�-?���>�p���m�����2���


key: chroma:document
string_value:
��ޝ���.��,a�W�A�ĿJ� G�O=::�8#՗�$:E_�
��̙?��K�*�z3�t�EC�6g��:�?(�~�/��yC��b&"��e��6������TcZo�6�F�h�iN��S�o�H�� POQi�-�e"!�
��+�~�]�F)���0�Jh�F�L�D�"�m�T����@K��p�@#�.03�
�С��n�j�E�{��A�{����6�����c3��CӢR�a4�Z�a}�
��{��P��o��ݷ[���`}Щ����o�s]���`1t'�h3�SH��C�7i�ZuV
�v<�N�n�`J|׊2�W{�T��E�A�dN������&�R��bPkǁ�������tM��mB��&���8���'	�Q�<ϲLV����Y+!0#ٯ!ka戠O��e@x}q�L�wo�i�!2q�@c��޺�"YӞ�̕�&�5!kz��|$!��.�^3�
�˝t��YJ�F�F%��D7��ũ���0:�+�&pp��%��EJ��9�ͷ�3�{K�E�nZ�"l��Y9L�N���zg�N��J\yy6I!�737�︧S��hh�k�}%82���y�nL���ǃ^9�����~od���d|�U�������R�bz���.Or��-��$�qc��J�b����^��$�x�[�:�w�)B����Ŷ.�U���[,6��-)�'J%\2��/�sA	V8�Es.i{��F��9�3ic4%���e+���#�h�`R�+��H�-z%��u����r
0���"7!x�J5�pqҦ�H��ֱ�$͕��S�rٍƦˑ���� �T�r[�PQPi]����7�U��t�u�}�ٮ�_�brq���/�ѭLn�9�����t`�������� [%�$!Q{��:3��[bG�]��\:��T[M�C��8.�S7���=�5


key: chroma:document
string_value:
���<�C7P�r/	���FLyH�i��J�<{;��[,�P����ħ����Y������_�f���Be�V��	Z�x�=[�뮓&����Q�2�l��f����f���܈v�%�,j�A�,m�Z����|�o|��
������E�z���ΣǮR����W$q)V@�>nΝ�k��g7�\�c�ˤ��O��.�5�s���k��k�H�1��ɯP8M�:|�;Z8��Hi�-��'3V��5l�p����g��)��Lu\s�>~��_գ�}]�S:���c������a&?�L:-MzO���[?c�͙���1wqھ���:H��ߐ�>��1B�Wܺ7P}n:w��C�{�/�,�.V��aɅ�5f���l�b:����?�α��yn�A��9<���n����~�Qlԭ%c���K*�j��W{��筍nT(�aU����n��S����Js�%	<"���UM�k-L�0�k{�4�����$Χ��5I��. "ҿ�k�7��7���6�L�ťS��Ml�]�Q����E.�5E�I
ߡ����X��ZP�k���J�؊щ	�ǻ[�RӬcC�{V뇃�5���]L�e#DH@8��*���+Ad�*�2�^B��
�[u��)l�|�����N�*u%i�a�.U2a���������!��q�����ע]�ho��q��p�)]-�N()5��)uR�[b���|%n޶C�	B%���V�G�k>a�c,�ayx�$���~�zQ�i<(�Sl�*���2
^tI�q�8��T�ru�=��Ԫ��E�F4�Ĉ�\}x^?�ȘF���"?�/�wF
Z��!ە��Y��tҌufZ9�%��u���鱍��H"gv����6�vG�5�d�������N$���7�2c�@�bC�a��ZO��0.��


key: chroma:document
string_value:
�*GP�,�D����������4�t���L�2ą���.�Ώ5i����Iꕳw���Ea<�8t����j����Ƨ�T��s�
{5�����f�F�q=�wn���}�6μ;���,���U���w?��N����]:�&�A�M�i[�d'���:��&VZ>iJ�i�Q�)�I0�����!0&J�RA$ZZ1�(;H�p;�e�H%N^�a=m�>X����#�H�?�*F%M�̀ݾ��l09�8��ҡ�l����Q�,d��4���繦�4�Q:�^��v�b�(�b:�Mh�Nq�:I�˜:wt��
;]�ڻ�!���Oq���e��X�a�Sʫ�S̓/?y~l�}	b�Q�"�w�z��K��T�4�hJ!�Bք�i�kZ0�k.�V�ܛ�0�����Z'nN�Ё���Pbi����PB�M�:;�����ˆ�I���~Q���&�u�z�_،jly�F�$�0#V9���z�1:%�ӖR�TZ�^>^K0>���Cx͟ �T���"I��J>�eF��rps��5y�*�,�/����yjڮ�������L߅cWȩ3GкM���\:q1s��`�2���(^����������S����f��
��ř�me�|��-=E,�ggB���aߝ&���5~#UH�|���+ $�Ǯ�qx.z޴e�x�W�ň5�Ȉ}-�Q^�.5k*����o%Bk�Mwd"�����Z�z����B�`�U����{�w�E�8h�`]��۹����i��i!�*D�q�dC�b�x���Uj�vh�CCV��]�m���W_�1e�zn@(#����g m��eXY?.�<���{ȑ��f�k֏F�93 �TpjQ��S[r�J)��)%���y��j{H��M�(�ֺͱm�`!E�tI �j
��x;%|��@H�%�zf���g+gO�
��'��5q�]3?�N��9�nǭ#6�SlFq�u%wȽs�[_�Jm"27c�V��xǄ'`}	"��


key: chroma:document
string_value:
��y�P�&A��I�����mn��P?|S`�J��G�'^��9|�5I^p��$hKx£c����3x���~�^*9�6��eP
��/��퇰��8������쁤:d]S�o7#l"���r��^���R'��⇽�n(��y\F~�4�����ˉ���Og���B�xd*&��d���<��$-lb����n�ݏ0'6x��*�h�ް�������2n�.�v�?��k���ɈX�*Mr�4s慓�YRbYy�p&�2U�wdQ�r�xy��!E7I�f���!NuK?Vif� �'��S���0��@w�����, ��if���[y��v�٫w+�W�X#������򢍏ɐ"aC
���~����4f��_��j.�Ml�ϐGZZ��|���n���!D�*N�B�Z���1�Z'��ƬOp��]E��H߮X/�7��ی���Xw���Ti�t�Pq./�>���\����@��[�P6/e�Xb2���?��Dǲ!c�TBq "�|�G�ђު��
�n��<���n�c�9��w����%���B/��r[9���Դg���p�`��f@�$����4GGch�R�aA���y�O
�G�
�M��7T����G�Hp+:��[�m��JA%�k��iPC�HN�-r�J��ډ�;Q�uRFD]Sf�����
m���<�ĥ�B2�aѻiA�S��_ri��D �\~���(n���
2?Qo�xR?%���'��Ł�)�Y2p��a������]m��ٴ�g,$�
�^����:�
��lҎ�8��i�׸21մ��)�c
���vea*��X���K
��)Jmwyni�����g����{��


key: chroma:document
string_value:
��lҎ�8��i�׸21մ��)�c
���vea*��X���K
��)Jmwyni�����g����{��
�K*��1-��L�J�L�dA���r=@o����܇L�Et��x�����vБҴN��-�A���o-:��#��&��u(�pv�m�9N�Jc�,��B��F�S �Oެ'�A�*RBa#��0�`4��Ֆ�b�d�#*�.H�B�Ysv�xc��V�C;�������d2�<�xO����"���D�[�v�!�y��������kt;s�M��gv��+Ft�p�S
�����,��h��ګ޼;�c��{ �~����(�eeX�UF�L�6��.5�5�9�f�{�mV�쁜9��jd��� V�2�Pǚ������p��۞$;2��]�$I(�I}�n�~��Cz�5�VzG�]���s�%��9*�e8/�a��irz�=`��2-�C^�},���I~_��^��B�QF��`r0HJ�i��I�&
Z�}����{�


key: chroma:document
string_value:
�����K0*KK��e��*<=g�)>`@�2�x��$Gᬐ4MV�g8MXL��Y�C@-��t@M�X"V�^�ʋd�^�_6�c�,&��w��y�ݎt��$r�������ɼ�V�6C-Є_�}������ϊIk\̤���5�7���Y���s��/&�?�(s�{���UP����W�\��7N������H�ۇ[t�Ƌ��G�z�b������l�b�V�|���r|�V�v�<O��U$������,�|k�?*ǩ����S�*RA�g�.5Gs��t$��zK���h?��q��������,˄GtVOV���2�X���^�5+%$6�0��+��M�upت�\�v�|�����5����BW��r�/�Q�~���Au�ʒ����R��QV��?{��k�d��찻;4��]�N�w��:�W?G�2h=���v资Cz�el8y�-d�L
},Y
]��ta�[X�b�I'�Ь��+֍U�9�F	����˝V�g�7zXq����<����W)r#���O� OqS�J�H��G��*\R뭗�h̴�ڗ� �EuH�ee�$=��Q�������i��7�#
	
��S�gx�y2ˏy��a	��t�އ��^Zlɗ��9d��S�2�� ����%*���{}����wYݿ�nw�ع�*�YB{��'�;�\O�b)݄`


key: chroma:document
string_value:
��S�gx�y2ˏy��a	��t�އ��^Zlɗ��9d��S�2�� ����%*���{}����wYݿ�nw�ع�*�YB{��'�;�\O�b)݄`
8������վ3�2��[~�`�ky�^��?�m�Д��Y�lb7��C�|F��T�sXF�+F���ӆ�#��|6}�@�r��M�^��1�L��"�[�Y?�뵽r�-�U0{Lxv��K�wh�ϷF����Nߓ�
��B�,Q�+W�Qq��]X;$�d� OT�x�d���y.X���4)��hr�|	E��b��C�2ӭ=뜨����bA�V,��$�\V�W��,�_p#�F0���mw�4/�0�k��M�
脉W���hަ�¦�i�`pսg˫�0��� Ig@����l��֨�y�y=��1fĿY<�"�>l#-����Ң�i�{֋W����sI*��m|����#�/^�|h�b�r�p����n.��!ެ|=�~��/�1�9��E���-9~�
��
������]���sw�N�g�7��3g2�a�Im�H��%�A����_+f!'�A�K������V�V��Ƕ}����9���3k��i1�i8.�]2��ؐż
�<�<ɰ�[�>,�n��fY}���M%�=�P��.Ӄ�Nӊ(6v~'@��6^�|����[�L�#�s�N�LO/a�öx��%1�sx�}<�f۴�P��d.M�^׮�l���)B�k�L���;���lp�`���*��G�;ө��k�����C�wl��
��no>'��]�ru������S'/_��c�n������;O=xYO>z��݉;(� �lgܭƚ2���B�g�$�v�	�݊A�9R�>�)C��)�cN% ����]��5�0��Y�D��r�7���Pq�0�Qh�3��6�����T��Xn�)��Gt�8
l�Pd�Դ�	E�$��4�������


key: chroma:document
string_value:
l�Pd�Դ�	E�$��4�������
�(���e.)��w8P�� (�'����vё�,�|%4gw�x��;���|�R�rx�������
��B��<	��И�*�H=���|ˈ��""�/;�7P�>�d-���2��C��,KFi�\�:�\kUB�D+����`i�
i�m.�zS�ja�4��uK��<��<#T��)�MS������@�L�`"WY�E<�r(i�I�A�˲tii��h�nA'HŻ`�!Jdo1��ify�β�T#��Q�W�A���"����\��\"9"�	J�?�a�2 �yx:��Y�"���$a��[-Ɠ�r��؍Ñ�U�2S*���^�V�	+6��
���
����t���
�bp�0�X4hfb@s{���
U�Z��6C���
I�Ĺ%Q>��H�,�b-1��P�6�̆��=J��%��xәḁPtŹu�I|��Wv�G�85d{�s�{�Ctfʇ����ڝ^O�ȃ����D��.g�I��+-�Z��s�����l��g������R�p+MmB@�^!F��ٱ{��Uo���7's�~��stH��>�:���6k�F.8j{g$tty��)
���y��AB:�LY�1���Wh6�ҹT6ge�g�Q��g,m�F�����zK?�	�WF�O��l~�
fS��U!�e�M[�#E�urex��*�1F��O���艠1�g�C�A�8CZz�;�okS2/�S�aN�����l��2�w6�z;â��v�s������(;C�T����І��Yf2(7�J�c�'c	!�S3����p����{DڔAz�J�PNr��r+�y:�d�!��D4[����ڷ�y՟��B��ݧW��uU�D����/��szA�sd�0�ջ��׮�����!1��XVE��LzFB��ֿ\�aϩ6�t��	Fa�%�q���P�������SM�b�����c�u�	�h>Rm�a�pN����ӗ��3�{j���_��D���|�+�<�8�v


key: chroma:document
string_value:
����cW��;����w=F��N����nci��t �EI]72��`p��dрq
�J־ӂj�\��}�q�yͻYV���b�6h����ť}��uKDh�K47��3��9
�|`�_��9&|��������KIΤ��(���؂(p��~�ν���L��c^^���Z�=]�
ztop�ϵ"��/��|8�ý7/L|S��DV�И��ܞ�t�{�w �2�j����j���9�p�S�P��d�W/�C;��{(��6zef���fj3�(�͍���T
��u�ߵ����B������&�L:�kF�+�{J��z�_�M�7�De�T6[#�?^Yn�h{�(����o�U�j����z�T�̴�MP���"�h���@C�t��f�S����A��ӡ����۷�dpU���~�H !�(����4��Eu�<���D���!kq����on#IC��Bt#�Z��6N�v�K��+!&�Z���
����#�/���
��+�5(	̺��O�WފI��������x͒�̸V\p��
2��x�5
^)��uze\�A�e.RaB���@�8�?��vʗ�9\y�װ��N'�X]��#Ixv��j�){d�]˭�x�M��ve�cP	R�MFqF��J�z��F?�s�$��%}tZ��r�Iy�/�7�h��}�tF;?q�"��+%}c�Q�K��9XUgD8w�v&�0�r'
Nݻ(5��h~5�r�a|��"�7���K��O.H���ti��IQH\�g#+^S]%�F�z-����$��@#������4���	��)�'h9�!��p�}�r�U��%�:�%yr�:�����6Xl���4��V�lf$3��K)�>�z%��*X��J3����
�7�ȉ(�� p��;u�]�]s�+�J��^��k��.�ԧ�2ML���G�^�����ye�}�m��


key: chroma:document
string_value:
�7�ȉ(�� p��;u�]�]s�+�J��^��k��.�ԧ�2ML���G�^�����ye�}�m��
>��άNk�>��	i��pK!��%��O,l�O@��?�7�gYJ���'U=npA��R�>�ʦ6��%Y�,]��g���%U^�+x!c�J�q�un}�s
�J���?�HX'�!]$�h��҉�h�#��bw/� H�J��T�1Yp�$I�菌0UM%���t!�a����ѯN���OQn@ڞ�U��C�c�%"�y��$3܇9�5>	�#⊺\�⦖@�7���=˖dYNkL��8���~$ (u��+U�8�-X���ΏDw�Y���}�����T�Em)Ό�%������O������;q�D�`R9Y��OC�ܧ��*�et ��Q�f��4ظ,3��-�C�jK�\���X�qX9�:��-�
f&��G"��S%DO��&���,���z�0Xd��5���n�����p��Cr���},w7��TA��T�@K>蕀q�����N�X��΄
S���#H��Ϟ@ہX�*T����Na��G�s�q�fi���ٕH�k���	W�Q���X-���ζb�5.��@�d�C���`	3�BY�V%�9	���?s��q��*��b�S� (�]9A�dB D"ݫ�2��r�R�y�5��Rć�V������8������R�2X6�ȳX	�M;ט�(����Rj�}%�·1bș;��	r��d��{$�ڗ�
�:��J��������`�ЂHϑuǟ�-n��l/�O3JD.�/3'��	�W]����9z[���ae��C��+��%!X���9��2����%#.���ս����HX����+��@Hټ�cJDS <��+��	?�F��9J��*X����2����


key: chroma:document
string_value:
�'��������$��X�#���!���U��҅QL�MU{O�|l�Q
���1lr�Xi)�.����<�J��f����L`�����**��i���R��w��0�'r �ä��鑛�v���s�f܋Z�֣�������2�Z���%*�
@�B�k��#>!�2�e������ �S�|�fYZL+;��=�N���7����&�B*>@h��D� ����M
t_���B������"��L9�����v�W)/o���27aVb~�_�E��p%Z/eW��1���ik��Q�wk;V�ZKz���+�Q�Yf@�P�.K����=37s�ʙ�8S����I�3������Y��b������՘�"F�.r���AOt�g�A���A��+����[Q|�*5��`�Ev�L��!$|0��>�3b��:F���r�O1	!��e���ij�qhi�!�5�����ƣޡ�Uh��������b�8!Ehդ��|%J;�E���n�˳젉9��Q�����*>��A�aFrh�bl��OC��f̡�Lº��\ j�D���k{$��sv��2��^�2�Dgn�Z$=q�&a$M��T����:yW�KK~m3�//D$8���+=����9�J�G*F\w���w:�7Vo��z���v���@,t�	/Y93�;]�q�~�=炙8�RM>�m��%<9_�&�T��q��.?W�P��/
+���p�⓼�,85b`�HZ�|+{H"Mb�+���~��T����sC����iU;�6��6�f�G:�7����8����t�4�.K�e�*���oL��	�@&��飬��5��'eYs5Q�5ݮnK��+���[�(��\]#���U)�G4�|T��3�<̓z<_k¿.�o�"�[�
����}�����%) ��l5�.,8�


key: chroma:document
string_value:
��V��K=#M{�4��|��ǘ%G��(_�惿�Ф������k;���ۛɲ�������Av��auΊ#K�h�"��&�ˡ���r�X�D���dT;mC5��ܺIPbP����R��q
yH2M���7hD\<���F
d-0�:Cա�no�1V��#<(Vk�������Qb�`ʭm�vp��f-<�� ���W�E�Q"o�����v�k�3
�wM�	���4�=L�JB>ʡ�{��,�����\��$Jb�@�+��&�c��{.z
�����v�6ºL]k�|cm�A���kQ��S�4ߩ3z�������Y���RB��R{�<�8�xد�����E]1��T��-��ؽX頓������֊�;�&�d��U%��ϞM疽!��NIk���T��:C�M�*v���zpa3����n��w*9m�e�fe51nKz����R�O�"lr�8
<��B���A���Pv��$ �nt�}8���]e&�{Ж҈�XE\����]=H����>xކ�l�63D�����8�D����啭�����@���U�Y��x��Nς|���@�l�[�6"�p:g��QF#���C�D�O^U���hΐ��Jx��T�5�Qz����2��5���F=�Q3�i�T���K^���������
?.������S���,W��\i0)X�au+pR����=ٓnk����J��� �:��~��J:��{�Yf~�����X[�Zz!�A�z���Ǡ�uHa-��.�W�������Q�4��{`l�չ�y_F�(��,j�n@.v���$h	D]֮g?G��nS�`�s���Ջ3TfH�ג��<�u�#�
%�@5;�����K2���;�~'�M�m�7�M�A�l\�=L��7�׆��q�*a��$�Nc/���B���r������f��P��j�:�G ������R��:1e���


key: chroma:document
string_value:
6��9mC���P��j��鈩a��9M'O^�&{�GG�:�gg�>���3M��޴���ˡa���2G�4IChe�QC`����a�:��Z{�M�J�7�"�*�i�(��	쒷����+���y���qE&�#���S>N�D:1f�C�X�X�!) b�r����i��+�爀�9S
7�G��-�(��
�6��Q��
3��d	�GI�q*���R��kT��EP�uu$Jz7�@^��Q����f�ꉁ�aȤzm
a��8�I��RkV����򏖼�)�&�95�\�;��5�P	ݞ+��w>"�n��0k��!��?���9�͘E�;�O�#�����Ʃ����qݴ�k׻]�
�0�̗}f���z��&Ui+
��**�����n��.71���zY[�lJb��c�"�9X
�?��6�j�
Ux�X�!��]�����e8a��g�x�����X%cf�۸���<��^���}P�ً:��&Q�M�N�j�d�*�Z���C{[�=e��1)�n�#K��Z��b\{�G���D�i��AؘeBOF���^k�`�����]dv�����Sێ��y�o�;��P�v���6b?8��j���t=��v���BFx�؊��
5ĨZy�M�eD�Y<��9i,�C�~�^FC;Y3D�b��I	tY�ѐ�{�~@lELrN��gi
N�����/��{��P����T����z�{!�d$n��͗�JŅd���Q`#[̏��9�Cᗦ��
vj�-O��U��CH�<���q���GY�sr�$��R5�^�����$DY�7$��p���g��v!��\%�`�1���-����


key: chroma:document
string_value:
���؆ ��oגcDd.��Zoֿ�
)o��h�0�ܰe��MnH���%��$����]�A�L[��Ȱ%�/����.�sx��s��OB��E�d�mS�#)����vK3��?��g�-������
N���d�tZ��$�NQ��z��c�`�S�O!�׻��=o+���}��������k]�aq$�Y�M��$B&{L5�K;)$s�!�V��BbM)�F�R�S�Tj}���0B*8��#őI�>�)��㤔
���X᭺�i\XI�{�˜ƀO6���]��>�ø~/|?��8'���BlM!v,�(��D	X+G�n�`W�Q{;?N���9��0u�֔�ͩ�F�1R!1�%Dv�O����A�o^���xķ=;Z,��f
:TdC���\s������~Aa�����c8�m�⾹.)Tq��ĽT�B4f
M����*�JD�H��>A��"{�Ɣ�ѣ"ST!�UlRr��@j&"�V.v	V*ܗ��4�Lz�ww���-N2�CP��@Pl�Dƅ���1�U�DC�LI�����u�!IzULRR(Z
�?cD.��n�]�-Ջ���ӳ��l)���A0�f*QuQ���ɂ�j\t�E�8�}�G�A�<�y��:8m2nBdy�h�����S]l�WV�G�>F�u�]X�]$ׅ{�c*4�h���.�wX������?Ӕ9Hë��J$Ù.iN��=��T�28�k/��Z�D'��I�6-��W�瓳[ηo��S�5r��$��v��G6��"�A�"&Q{���s$\ٞe&���������}#P؃)D���'�W37�i�id\��B�c���U�3�4�L��ES5Fb°����z��&6,s�r
�ן�FQ�����c�7�K����ׄ�7�0�=
)<�:�O�t/wl��9j� o�:!���J�{֯��t�\\�C}|e���¯


key: chroma:document
string_value:
���@���O��|�i�������1�`H�\�^���30�yK��֥?>�G
��M��:[�0pR������6��K'FθF=�r��
t��!�p��pnF̖�D�C¹��?'��r�A�{Z�1�{p����4�7:��D�V�Y�;�ɼ=�����z�J�����$�s�/P�ڞ�Aͱ��&w�
��zP�"���3��<�`����#1	��79�1�
/��u��Bn!����;��w�������sX�د�u`ˢ;�v}y�o�WJ���;@�/} y)U$�Ҡ��6#�2�Qn�}{��3I4���#�ݰ��q�d[��k֬FQt�6�93ݝ���f
	�U�$|~�ʕga�.�d`'b���Q��F�$2����H��S7��{r�eoWI��T��J�i�
�Ǝ�/`/Qd�Z�6�ͫVsf��Y��n��Ѣ�R�I3�+��>��E<�nf;���%���0�c�{=�C࿄��U�X�s���'6�Z�+��y~�vｳ��G���� �W��8d�XOu�zD�ua�9��w��EU@i��B������i�ֽ��u��e��mN���H�~�P��?$���Ƴ��L�]�[�;�C�O�B��� ����S�Q]S���%�������&KF��;#��"�n���l��m
a����q�<�ru���X���;PfW�Y�o�
���Ɠ)���bĢ�Z�+l��wW���o�䉍��L_s�9S�vu
Hc(W�o��H���@�'G��N�d��^�?���5��;x˟-��t�	=e@}X����%���b��%?{���P��{�E��+,+����UPDk=�ދ`���$4�!���cl�֓�[Avk��fGY�g�������G�?9c�iDy��\j���o�ߌ�ni���R����G�pJ�%�W-�(wG

�`��Ej���b� ����>#�t�(
���U�����=�q� �����l


key: chroma:document
string_value:
*YP h�,A`���,��J�J���rhA�������z �q��x�0,�;&D�{�=1���P$_�RUto�?7E1&�T���Q�V��m���d���1FDJV�+f����;�?x���<0����(�m�iK�l��7YFC��.@��S��q|�|!T�u�@]���LʞuZN���e�����,�۷��$�|�;������?��8FD��~�.�55:"=R�HĹw-�%�����W�_�\HW���X�$zRj��$�[�ĥ��Cy�&��Z��'ۜ�Z��Н��)2^b��1����q�"��ܛs�O�1r���U�!b���f��C��&��雕J
�	��tw9c���h��C��N�#%|Ntb�a��;��!:a0SU�P��33<�Yu#�RY��H��z����?��(U"���i�3���Dk�
P�P���o^+�r�UN|�N�w[:SO͙#��"�o�5�ߧ\o��i�������uG__s�!H�Ղ�����t���U?�����S:��òa~`�{��)��T^,��.��5�(W�T+���վ�rUj�Rby��'����1����#1��q�>!���R�f� _%��+e�D�/�5d�`a2|}mH�:�|o0�*Z
��B1��|�zp丣�W��R�T��[{?�6��_��*�O����
0�{4ۏ�d?&���TO3oE������"�l�&�g�6��)9��XcNP`�1�'�u:�胐�-��e�
=h[�YK^�	�u����;dW�>Q�=��*��9��7�g$S�t����b��'/


key: chroma:document
string_value:
=h[�YK^�	�u����;dW�>Q�=��*��9��7�g$S�t����b��'/
����~���Rzxd�Ót�ՄY��n��tu��4��@�z�{k7�*IuAw7�k(r ���t8�ݰcrr��=V�o�vCg�]fDg�N'#�hp�m�r���l�:G��\���`Jh�"�*���:��מ���{p���r턺`�M��f0h��O�7���ڢL��n.P�؁���"�C|�Yxݲ� .._����a�f���by��*:�ù��!�2E�t��F>�n�����D�30�Jruo;sl���ǎa[F&��VH�Ш]�D��E4k��:B�YV���Wa�&���j��+`0�T+!X	�?a<�@�z����>�B�R���������G�oUo�����	��j��v��'!A�9&*4���G����O�h��E���W������y7�׿֭&�%(("7)y�Z�L֪�zg�����w"��%��+�n"=��__��xF���q���ͩa��@>W�a��#D/��h~���_~y��ߚ�h�/��	�1�}��v��{~�������e�W�\1���p����(���i�s�/�Dc�ۗ�$�����[��G7ٍ�$o/�)�HE��gK���Ź��G�w�
�ļ��%�~א�	!�ë
u�I��
��
T'��
Wp�G�vn��6���Q���w#�V��Wn�O�w�:9-�x��Mfz�-r�MRFi�(�b.V�+@��iT55*Mb{3>�>"�'%��U5:8�:@�yU���	��yg"bӟ�/\������{-�1����ޢ������p����]q�6����r��5��x���̘�N����Pl�c���T%�BQn��c�[�~ߓ*��"���^i�l�F8t�o��{�^oe���	�I"3�F/��
�#��Z ��s�����[+���ǉ��f��b�c:�s=yl���U�n]y��z233v'Y��q6��i�


key: chroma:document
string_value:
�r�Yxzq*7,���,�f��
+K�높�Ҥ3�t"�G ����'ѹDK� 1Ϙɻ6��杤T����ILQM����7��,��ӇoDI�B�E��39鱤����J��<�S�[�2�e��FJ���Pt_�����������	BSh/�F��ؐ^�(]wT� q�r��D��$fG,-��k����3֮�$��4cSS	
�s�\x�6�y�}��?��.��Κ�r�hel�?�j���������uK�hQVh��v�ޚE��#��]���qn�Bx��I�%�y�f�i���f�Fϭ�X�3&�]����4�bNe�)��Ǧ�����x�K���R^AW �V`b94��v��z�Y�B�Q�k|+9\QCd�_�~�C�}
xCm��E�ؑ���+�>RE�t)Y5P�G@�����1�򫝿V�T��jǶ�ա�h��ۺ���M(�3���o��ww��F#���|bg�6#�l�*0�哦���Q�d*��?_+��)��\��߫$8�{.8@���r ��ac߶�.<'��������-K�l��4D�ɒ���Y?v�]G�~<|*�i�"~�I~��q��$ki���GÖ��S����<��f�G�e���RKv˺
�罝��� ������k�U�Ǻ#�##@x��AZ?:}́��I�5C���A:���9�wb៤(x��ES����/�MZ�?|����^}&+��dE�Z�`�瘓�#�V��3OO��7���[K���R+`��'�#:�b6�I�OX��#�����о 8��>9ӌ�2OLjW�����o��fT���+�M�s%bG-Y�/D�ݞJ���Viވ����τ?N!��2	M~�)I�IJ!�4�%�7/[X{,&0$@89~��	�'�����G%��mf2:s*E��%Ev


key: chroma:document
string_value:
t�H�F��d�lѶ]�5�]n�.~F�����Ò,M@BB��:�(�[N�/����Ǻ�=6�CG��H��:j�sfJ_L�I*��~��X���������SߩS����&���+U��Ʀ�.�nB������PN�1#2�U�m���;�Um�{ɽ��g�
������xf��KC4��J��'�[���<��Br{!�V�
��A�tUTε�o3�A�)�E�0����P��v�W�;��&z{W�P�a�)t�


key: chroma:document
string_value:
݄P�X,�h͞N��I�'��	9��>z?�
��ҳ�Z��D<���tK�kW�>�4B��p����iSfZ*��������7���4a��i���_ʸ,J?M2�p#�,���,"��S�����>��
�gE?�Ӕ/!�`�7��i�Ң'���GW�p�������Izڽ��g"�A�<��+��C�`�b��C�w���.�+	�LO$C��xO����`3:��x�l�4�$C��:&���
mx6J��`�{��o�ǝ偀
6k�O�5��1ߛ���qE�y���N�K�E�K
&7oe�7��g>gVS�)c����)�$4+�������T�����r=i�:���Ġ�JX�Q���3��w{��I?��sO��R����ʤ����F���/Q٭������Pk"x�y�f�<�);GIZI~��K�� �G�D���RA$���Q7U�
k���XRl0�,��ޝC�md�]I�5UA��2<�!��	6MAE��x�G(�����F1T-N��+Q��Q_]�� �vF̯�ɏ�9�7��i����OG��D�{}�,��LF
��q��"4	�;:"�21،�tm!�
VD�˓C�EIA�Mo$N�'���(hnX�P���L��~���B<56�TI���-s��7Q�z�"�
Rgq�#�A��A1�0�eO"������K�%�6s�J�#�߭�%S��^2�2U�v�}�D��ۜP~���帵w$��~/�c��;��:�0���.6R���T<�5�����.^w���D��&4BK����*�e��x�����Y^r"��b�PB���i|\z�$��'�L��=ahˉq�B�_H�a�+*y�	;�!�P��,���-��d


key: chroma:document
string_value:
Dk2��6Q[��TW*�NPz�6��=�ا��$�̣f�
3�)OY�$Z��C����*�4һ$�W�?��Y������Ir���P�F���86g�6u�35�_��K�	������b�Qn���l��S#�r*���&;�0E�%��Vg��qb.g�1i�6_l�H3����-B��Ȇ�8�T�"<
9�PM�A�.O���
4�^z}/SjD�4)/��C-Z���E��2a�+:z< �.�!���_�L:$�d�V1�;g�\ʧV�m�D�ե�N)*
��'�IB�,�����D5o�J �R43b9���wz�?6��]I�B_�a�R�0�&'ꉹT����uFV\C,�J�)�;������|�D��m8��6��`&�1�Ĕ��K�r%��
��
c7R�h1��W�3�>'9O��'8?Zn�����-�E73̢���3ǆ�Q�W�G�Q���F'�s[6��B7M��*�i�l=}
͢�k��6,U�&r`S��5K���%����^���q�$G�����9��cn4
e�,��1�o�<x�f��=-T�ӄkb���Q˕/��q��v~�ʸ��98�Ґ�C��e�Rv�]��8�C	e��+�?y*.�5=\���j���מ�|�*l��U�{�����@)���z}J�����0���H�l|�P�2��t\���?l1�˻���5>`�+_&���2�l���g�����s���3�E_Ev�����D�ً_;���hl��lN�3�Un���7��u�Y�c�
.$�_ƽDO�/��I


key: chroma:document
string_value:
�J�	i��O����>�]�_�������^�)V���v�(<��;�#焨J���	��-��q�n>
)�vb)#�h�3��ū�FEA���-x��r��C�Q��͕�n�G�`�{���q�#4��^�to�i����N�@ZPf9uE�xj{�r@��92A�%"RW����	��IZ4��@�z�� TW��ঈtnsT�H+V�v�������H��	D'��E����!��D���%�����#�B��7�R�ذ�:̡�qx�b_B�19���f�k�E[g���-�cpX%8�m���v�Ɇ|b���d�A��9cs��դ����aV��8�4?
�{`������� ���t
�� ���� ��aP���¢���g����D��(��o��[�_�,h��ȣd���t��>KY�p�aus�p�������+�M��\qw�8�騦h���$����o��B`���4���y?�Ϸ.btoO�O]��܊�-۠L��4�g���w��>�(������-����� Kr�|v�ԥ���HP�հ}[�HK


key: chroma:document
string_value:
tU��G������"��o��GX���"|8C���İ8L��,|(o��R�2�%�^@?�~̃^iԃ��٘�aν���LyY=�ȅ�k-#`�����Ra�������aZ���^���%{�iz�@���C�q��%�fw�%�R��撢ޞK�9���jag��d�'��tOvn����[Ť�s��Z�������|��$>����n���n��d�Y��V�"z�x)�Zx���a�u�I��z2�#���_�0��60���i�{�5�	W&��/>���5f��Q}�6�lE�0c@�Kf��9a[f���*����e�K3�p�M�l��o9��-V��%8|*��G��S&�GI�Θ���殠ͮ�ʯ>ߦ��chO~�G�rP�y���FW�JU��L�t��m1���zH�"d�z�烙YjuZF{wF����|+���rZI����� �;oMC}��G�b��Z�{��aH_e��">���WS�U�K�OS�w��[��$F47�9ca�&S�C�����E��Z�)l�M�4�9a�}K}f��!sb�4C�'>�p����ӡZ�n�{�\��ʴ�nTξC�w�׿�4n�&g
Nӥ-+��r��*�y����\N����͑5�o�zx�"~��@X�&��>O�B7���I,�]�>�ǚ��H�krs��1�����y�ոƔ���.<ըV@��ϪB�Nأ2T2��nA�q�>,���a���W�����T��X�fy��3�e��p�:�2�N��If
�O�t����ړxWnQ��IMԀb���5��:]�o<��)
��?sZhw���[kV�n_���"|5-�f?��?M&L�
M�1�Dd�}ѢD


key: chroma:document
string_value:
�O�t����ړxWnQ��IMԀb���5��:]�o<��)
��?sZhw���[kV�n_���"|5-�f?��?M&L�
M�1�Dd�}ѢD
0'�T�X=��T��!�gW?|y��tq����3f[Y?6���yZ�
+��J�LnH|�Y&�����36s]5Ȃ�%��b5��u&pFQ�!�$��˪!<�x�B,0[��0[Lk*���~\>��z(W�z�����3a�7����;w2��Ox�C�)r,�㰾�K�?��	��K�{<�x[��I���������G7�#�ϲ.�Hǃ*����7��p�~2�[?��=�׺.��^sdM�
���vނ�v�I�l$�wV�5S��B�R��ĥ�eQ������`ë�����,��ܣj����Nn�l�1[��2i_/��J&L��*���I?��K���������A�%���j��2:��=/r���wp�_{5;>���x;�X����O��Qȟ������c�Cduπ��<���܆v�7�Skjjj��X����Mፕ�;t�IG%ه~o,��>w,��*��PaH�I�P���WW&��/�M�"bu<��m��v<�w_%�t���K
�����l�޴�d��b_�Lmh���2�_�����N�դ$��'&�M7�����W��RSK�-�F�k���{-0Rǌ9�<*56�I�~c:s}�J�g=�9+�H�d,Tؾ5n;I+���<0��{U���rѳv��W������և-uN���ԝN�_�oDY�&w��j��V��5�j���}br7�Qla(D|2�{�LuѨNItH:$
S�R�n3�FX%��a���X�M4��'��1�[尉Q�j�|mL�Ԯ��=�:��Gcb�f헕�Z3����&[�]\��ʝm�����+��,�)�<ף�晽�<���


key: chroma:document
string_value:
��Q�(j����x����h~�������AO���{��_Rf��`��gO�R�������$�	,n�Q�3��2a�tS�S�v߮�x>�g��E�C?��	8>��b��h�#��%�d���d�=��)�$�f9H�{?���n�^;�d�4؍T�oc��<�ͥ��O��E��¹I����.L#p���-��K|�vX���V�X�š�R;_��n�/!����CFo����Y{�t�s>�����+m����x�qP�I���F�l�n�i�[Q��!je]��^A?��x�� HCW�����M����Z�
Pb�č����:�#!��F#�u�T4�f��@B0lEHv�S)aք��d�������_pOԾP�+��Gߓp�Θo�l����'�)w�;���"}�^����4�E���\Q?��z;K�N����{J��2c%'�a�k�Yk�hny�Sʑ�6��9��7��F=��ܞG����(��$�p&�$����CqE�����G��
�J��P6��G��M��×��(��U������K��mk����y��U2]J��
˃^���?�"���/�]
,�us
��l�P�:��*�Y��q�j�"N���RqE}���"u1�>�����'�<�X��d����O��xGEJ
�,���p'��!�7���� �%��%$�G�H���[Q���Ӑ(T@rX��ՙ��C�?W7t�JOݡ^>/,�p�R��L�(�簛���l=<3?I8;+�$���(Z�P���wP�f���I��ij�V)M�遀^W�pt���+���l��i
a�Hc���GX�N��:���.o|�b��O�0��>�\X�K�ź�a���n��)6����@��Wf�#���|�N%��v�nO�<��F�JF�n�X��G 
��+:
��̡�39��_�ߥ�֢�����67�3�Ic����8�i���%nٰ~m����0�����J�P��6�`~


key: chroma:document
string_value:
��+:
��̡�39��_�ߥ�֢�����67�3�Ic����8�i���%nٰ~m����0�����J�P��6�`~
�)
���LWC�{l�UTm���L�t�Bo��3�U[�\;�R���8 É�Ҽ]�_ՉA
��=a7cÌ.r��kZj���~�e�س�K�BP�,RŚ��^�$��K.�2$�^x޹�pW�3S/G ��yB�F�����_m
�����?8D�{�&-�S��e�~)�#*#�ʃ�#��#B��B!*�ҪwV�t�u_ӑ��/F|�aڭ4v�dΚ�w��[N�ubf��^�!���sx|g>/g�=�cj�]�
!���k�a|��B^�98�-�J<�IX�S{�g���8v�W�lΆ��2�l<�szakG�����@����E"�wn��RRu~&W08"�f&!An�wws[��R�'�0L�G?h��mq�Y�D��>_	r�:���%�S��W�W�S�E��M?���R����×��� �P��]�-���Ue'?���Y�s~pP-9=���-{��v��z�@�$h��б0��?Rz����Æ9����)x�ÙA��%{�����,KTfB�p<~txDĺ:5p
w�p΢��Hm~8� Yz�[��3�X�o�#\P�볹J&Jy����^}\��M �[>:3E��~s�[w5��_��_\�a���؎\�����Y];�"7fdf�o���v�n''r-Cðˉy��x��aҥ�e�Ԃ�*(^�
t�m�'U�
˾�߰��p�����
W��o�M����"�皣�VL�ؖ�@J�oJ|$�V��"r�Q�S��,�ya"g��s��������Z^�.p8VWJ�A�tf)����?^9,AL%���EF���L��
�:�)��(�S����6�b��20��a���JpW"�Y<]8j[�v���[y�[��M�,��


key: chroma:document
string_value:
zM	͆����X���3����!`�ѸN�(�y���(a�0Y&5�j3���
���0-w��]�c���Ae翺�ɒ�z@^GS����fV���tA�Ph��_a��?'t@*��2\��}a(�u���=�&<���U���R͎��3�HW�I�
J_��>)�Y�"L�75w����	8J�TU�w��Oz�xV
�S��O�$*SBҟJtæ�O�2e�a��t�T��BU���m�b�،�@�I{d��&ϥ�
J�L_��ss|V�O�OT���;:`Q��nN:(��\�wI���/K�I'�ܪ���4��m��Aϳ��G�z�~�"�J���~���/�wNǹ�}�:¹(��fŗ��ӫ�� ����o�BG[�4�o���}�2�	�:�)�6��5���Pt�� 
Fn6��c�H07+�*�B"�m8�'�D�Idz!��U!4�g�0��j�o�q�0�4��'��������/aV�t��o�R�ݷ��R�[ ���/]�v\�PNl��#2������|@c��y'kR�8sۊ5���Y���q���Z['��gjl@�@��%��>���p��O$��7���C�Pp��ۆ�LӴ(R�ʣ�zqf�$��(���J�-���;i��-b�$rb�~�/�:�L�x�#�<�%��յv�r�s��e��<��@�W
�(���US��S�j����5>��{'�\/��f�4�YE�7���:	�6�\����b e>�=WG���{%�*�c��;��������<]8H�=��[�Api8�Ή����?Vv���^�1���&<�><�7���
�K%������G�7<�5��(��v�'��Y�J�ڎS}B�XN^
��YW1l�<��v{m
=�+^��ُ@�'�7*}d���+-Hy��%�
L#T)DP���4_�;kq�oW:[	���'}��Y­


key: chroma:document
string_value:
=�+^��ُ@�'�7*}d���+-Hy��%�
L#T)DP���4_�;kq�oW:[	���'}��Y­
&�|ԇB0r�31��7�U��y��Zd���i}An�ɾ���/��>�����}%J,*���
����R����>�ꜿ�q��F��I@���c��_;r�<�M�"�ڂ
Kx���S��c�O8�5[��-��;Q�������0�KK� �s	�TC�˛SK�q�p/�����%6 �pˉ�����nC�Q,;�E`c����شad=vA�J�ٗ=�A���4jV�����F��倝#�0��^Ǫ�e�ylg�d~I�	xr�x^�)���0�`���vދ�;v��
.ڡ�
Jk)�m��gr��V������:���cRߴ��2�i1�V�+��%eGTzP�'�d
�fDG�g��y�hɝ�h����� �"P��-U��4Z��E[l�����D"����	9`<�\Դw���/��_4t4��8�Xj�E��qH#�V��6�͕���֤�>�����r��D����/��̰|�E^fE�c@U�2�Ԫ�� [�a��sOͫ�����sĀk��G�ݿϵ�d
����� ������΍u�#���Zm�N�J�2/�G�{��F!�ƹ�H����{.ʺ-л`e{7�s����px�D}Ţ�����K�����CzΕ��%J�
�%^A��hy1�����>�,�襩q�6a��oG��&��4�h�������P_����~������w�`�;k����x���aC�+��H-|k@�+��l���E��<���G��w
��H�����s��I��,S!�|��%(FYڻ�욹�"���}���'eO�.���j��V��BqP� ��+��8����4ǈe*���w��x̕�Ѯ��Ǘ�{AT�f<��8M��	*7


key: chroma:document
string_value:
pVu�G5���F#�A�jdY4��`�ڡ�лظL<~�N�t�f��CK�d����3�w�l�[��]-^`�I�W����QE0�9�rݵjۋ�������j}��ٿ9��U��mK�Me����Ξ��E]6��8�Z��ip�(�80����¹>��,s[��b&���7t��� ��ނF�e�݇�`�A��aMO��IRw��!؉Ӂig8�w��bW�N������J��"^㗟����&XN�o[Y�����˝��,����[S3��N7V�o������Cmm�Ї�~~������"s��R>�(S�/��Q��N~��$���X-ցф�3f��5�l��UA[�����ߋ6���G%%z��R�d���t:f��!�쫥
[m�0|�[�G㹻Wr�����O���r>΄��D��Z���;��N���>����T{U���l��}�9��ư�r~�
Ak�v��p���f-/I�~��H���莓��y-��aތ_�����Kp�T���i��b���&)H�%٦�̉,�*�s8�2�D!�R�;PZO��;N�4�*�W6)8"n�\2���� @�T�;�6�ߜ������n�D�Ȃ�>�	�"-oCț�]����ߎ9�(�,�dڋs#��ھL755���d[M�n)�������a�̭��J%bV1�7�͇��3ҏ��%�R�E�I�mko�s�Fu���{񏌕h2�
��u��ɮ+���W�+��;7�ϱ�m�����/3���!��p����joV$e�AD��%��mXԷ�Ǎ>�)os��-��f���u���ur�O-�f7��5�NU��ťe��O:����������ɣ�VD�}������o�E�ۚ�In��Nq�0ֿ��vV�X&O����	Q&x���`Ř-C+�y������t�:n��Tb��TQ�J>ǧVe�c��o(�]�d��{9�o�`��]Ϝ!��f


key: chroma:document
string_value:
�b��c
��9��o��F�F6�$��;Լt���P���?��m�ٟ:� �*>o�b��)����$ZO0U(�l�.ׁ���ľ�Xo�d�<���[
}?����e�{�.z�d\��jv��#�*2�� (H���P���?�p�����aW
$�f��I�%�D99��8s��.O�������Vߡi_�΋̈{�TL��Fɠ	\��G[�)�h��MK�j����
�RJ^��5U���X��M�����̲���ЯN�8��ơ][\ۈ��9����"�3���M"I��D�R��E�U���
�U���㝲~g�mpQ$��'Y"��S�y¥��%G��2V����{��f�O�����7����[8s�f��kV΋T/��5>b�1������=]DK�0E�.y��i�_��Z�G
�K,�$O0�Ck?��P�Cy2e#,A�y	���y�y�W^|�:c��jˇ�l/�:x%��u�%)$_+CE��$�t�"T�5xk��wL���K[�o���yǖ���r��l*����B��d���8�n�ٷcb`Ֆ��9�޴^��
z��o�_�~�3�A�
�(���\]ՏԷ����ܓ�G��Aܬp����$��7��Z��u����-�l.�:�i2/2q=�� �N�㹆����J���~����E%�22����$����k$=#Lj���Ԋ�S��h�>����4s��,���)]m�%dsJ8#�&J


key: chroma:document
string_value:
��Μ�Iz��e�ɇ���9i�T�'�2��*M���S���Xn�˷~���x��g������ݵh]J�k�:�z�T�G����]���m���kI��DIJ��+�NU��ɩ֓���X��>B��.�=���>^=���jMP^O���x�2EqGa@K�R�0�~�C��Ft�5��@�障���W㎨��G����Y8Ƌ�a���$�c�bY��OC��r�L)f�dy;�7?p�g���M�����Wj��~�x�v(��^*u�nd�M��0O ���멖�ɀJ_�t
���1wk0�^�&{�WϊA8ˇe�����@QP�a9��+��`��ѤB��뤧��I
,(/�����t�	@@L�^{�U�Q�ߛ0����0�ǨYހ��W�]�����5�iō�+j��6 ��������7����4��*L�?]^b�0!l8�]���]�5�ݸsO]!X��ˡ�*�k����;�֥����V�r$����)��6j���5�d	Ȧ"[��b�`f��J��m�3psKY^9���@KT��>)5HZ��8��[�0on���


key: chroma:document
string_value:
tB���#�ɛ�O{��-��O
�Z�1��?�B����\i�*|�K��gÞ�|���.	��bI�8A��#�1>���4�-���h!*>�ρ�fZ[�N�,%}Fyd��9�����|m�O����p�$��ezwWhH�?�������H��@�;�{N�M�^��S����|�6�ڂ�28��<��1DL���"�y�z�q�ya��C	�+����Bk#I?.z�mq)���?�����/4h�h���x)cs=w����o��Ќ����¢�.܇�{-���[;2�ߧ�����K�e�yfw�����A��.�X�,p�rsRVN�2?�P���-�����֏�V�ϩ�����dՁ�Й2b/��U&!ȕ���)2�n����!��?W](�j����J.��f��Ya���<��nث�1���(���0���(��#�\I��ۜ5��H��3ytV�
A�z���?U2��Eh,�z�-�ȥ�]5��f1Tf��|:I���9��G+��4�Z+o!�~��$nE��Ż%'��
p��b/���8�s֢%���,"������A��iW`d�&��ᑅkG߈��]�q���ZQL��V[���L�-B�4����%IU���D;Af���a{����/ӈ4p��q��*
����Mh��BA����И��:n2@�8�e���'�x��/ (c�"��.A� 0,�t�#����Nםb�Y�u(��ڪj�ѹ�C5�imf�'Z�nǶ�,V�\��C��1�� �	)'�(Fa��S��fJP"�����1`�6�.՘l���Ǐ͍�z'a^�[X^�dh�����9A1sMQ�xL�ٻ�?5(��" ������A��U�Ha#Z7�AGv.���.�M�6@0W������r�8ݤ�NH�^�=:e8>�f�+cڝ��
�)����7(Q��y�1�AZ�C&��8�Eƕ�o�|7U2�&~ET���9v�!�u�nqݡ-���E79=�1C�ϸ�\$q$�tX��ɋ�Y


key: chroma:document
string_value:
���ٻ�|gVQfK{�x�܌b��]Ҕ���4�Ϛ��2?��4k{�\����l��
<-`��U�/�c�Cmߵ��4�������)��zJ	��8Kl_�
�RPO+�,؇xP�d�%��(#�E�8M�����_�mbX���A#F�4�[�LL	"��e=.��M�q7ڐF�G��c �c��j�I��n0��'=Q ���؛
���L���u}��mL%,�_�N;���qҙ�{�;�_�#q߱Q��(�����*��=e�T'��Ћ�t�D�㺓/�O��`*"*����Z�TF�;3A����H�H����j2�4���xYo���;P�AH"�_*�X�J�>�/T-EpG|.���ǝ.�*C�C��i�5��<�n�v����O[*���O�Z�-5NYFӯ9������ ��9���vA�-W�� <��y��fF��F�U� wK7���h��f���A�d�v~��H�!�ۃ�9�T���Z����\=���8]��`rѬڬ)��,79�{�#�B#�eR���{�U��ªiW3Vp���������V.S�⢕��U�2Q�8��h%m�q��E6>W+IU%X�r��



key: chroma:document
string_value:
�g��
�Q#2ˁV����q��Q��R�m>9��I��,��cY�W����u�<��7&�߱r/H�^��b�ϳK��a��f&'��%g��W��Х��Y���.?o6W.�j\�Z�
����|��eĬ�
���.����$�=��$�&}��d;�pԓ��]���yS�޴P�����������"gW>�Up
g�yT_��K��Է�dP)N�i*�+�I�fቃn�@��[�5}�D�M��}�0>���O�'4W\Ǖ!��!9I��5�*H���(J����c#{GP��?���i�(QL��NO���dZ��q�M�I��ܧ��v\�F���P$�@LC�g�]|8�]'�R�o����z���n9����`�+����j\��VC &��YȢv�UZ�<�X������p�3�Z�q�#J�<�f�zK�N&w�@2���s��t��z1����N�pz��E$�h̵�i�&�"A����&��~Ӗwh��ڮMi�Z����?/���Q$�3�����+$�ˠW�[F�/w���5�:e���0��;���dS/i�9)ɝ�o>$�pd97��_53`���D���L����WY5_���k|��MR4\�A�����4�����<�l"�
Ȧ&J��.����]�wK�)�O��i�5�^01�.XݍUc,��� �U��r���c-ڳEg�V�_�ܩ���D��
gg�8�x����c#2o�6����䡟QV��0G�,b���uA�3b�1��hͪ��#��p������@+���@}�s���צ;�~�Q���J�覯��ɜ
�JA��3w�W�'�[�i�l�����ZD;i�CE�n��*$�q5�D{��9�o}��%y@�'I��3��\��?`/�tu��)��P�����P��6�P�d�-�����\�)�"u�	.��BH�s�"^��萡	���k���u7A����u��


key: chroma:document
string_value:
�����M}>����ȫC��3���OWA��p��5O�E㏘��"�7��l)�4v������k"G���ߝ<�ׅ`�?N]����6./{�E�Y��(f�Hn_�C@�w/w�:l�Cj�E�	���'�sGZ����L�m��I�	="me�K�IGȵ��ӭ_s<xE$��X�RE�1S/���d�����q�Gg�>��%!w���E/]��������?Ww����T��
L,��Z�����ʎד�|C�1�S�ff���Aʆ�Z�򔤂r�f:�,bO�p��ZW����=՘ �t����.�
��:�½,@�#C�k���3G���q����r��e�ノ�����������B�}+|}�x��N
��M�m�n�	��5m�no_䀤�&��L��?�<�O���y�2�G���& ��F����e�O��8��N�xS��U���_~��~3��^�~z=��ʛDæ;��J$�n�IN;L���<m�j\���,��ђ�d�Έb���:��1VZ����џ�S�_�q��F�;`�ｦu����=�$)��X���mq����\�$�&�6������Y0���"�����í7S'��<���o2��������=�L��oc</�N��g���!N�vpn�O}���D\O����%�=�2���l_'Yg=!��n7whf�,�W����Q��j�W����V��̐bk��4ЖZ��~�W����V,�d��Z������8!���ЈH����G�<E�!&��6$� �X���]�s"���U^|�h���?��I�z{�z߬��	�挔�B�QĘ�5to�8��e��]-=���/��3^q����!�@zT�wM��Y�\Ë��b�����f�OW}��ɸz�J�uj���
�����������d����A�UȨ`+`�\)�-����>�����|�낛"(0�1(T����������o��"��\K


key: chroma:document
string_value:
�#�d�Y�y�-7oE[�rwՉ���1��V�ۋش�&>w�߹vvb�#�2�<�����J��%m�.�1�NN������,Z�TǼ%�������[��f�>^�#a��GT˕w�B����Ho��������{�V�i�F\�UJTCWQ���3��8�9���1�B�S���9Ͳߖo�+u��D7��4�C�p��%���+طp��,kW��@H�uE��Q�DY0�B�ifkn���A!e���ꅔ��r�~��5���G���L�&�AG�X3����4/�W���pͳ3T�k��@	�\s�D��?C��#f�n�pAܲ�ģ��י}��|��yPd�dn��N�~p��"	��$~$�v�������uLʆkQ%��/�{�p��o&�1�Rh6)Z��cvV�2G�	�Z��J��a�93|�s���ؖ�y�y�V�Y���{K��,�>�i�[wQ��0w}���h�B�T�Pi�a|�X'�QB�Q譄_��O����n@ZŽ��(nQ�څ;��{A�~��ݙTH:eq����ĕ;�D�X$v���b���.ee��_RV��_�k���Au��d���8�t&I�


key: chroma:document
string_value:
��XnN�ќd2�%]ѻ:��kc��z���P��ٶ�*���}aK�m����#U�4�>�����%��(=�POyX�~Z�5����'	��0Z-�Sq͍l�/�+��F6������R�RSg�����n�zߓԛv~i�^�dVGSi���ӼoxN	�9�ӕ�u��S\'L�i���}���jǝ;T����Ϭ���r�Hބ�G�i�3D@�+ڭ��<�bY�nq!ª���O^�_��ޔ�X2��p.���S�bY��~e�-B��3��_�|�p�b����t����e���x�:���|�D���;]��ߩ��]Y���B}4�������/�P�(4ʵ�D��C��{t�.;@�UO�6Y�@`�d��v�h*2r��I����Z��|-�Jx��y��f+�x<,5���u�߹��0�m}[{��o���+K^_�J ����ï��gI���N�$�Lj���v��X���?�<�����fC�;k:�O�0�88��St�������8�>�>!+>������5�x::�A�)[�!�G�����ǶT/�p��[)�!b} .�a��5�&�;����U=��=ħ�CQ�0�!7�u:d������h�c��N}��d�w��+
b1��IzÃ�xk�b��[G�5Y���hj@q��
����8:E�Eb:��5��+��Z���ha�f��p0�n�q���HN�}�
�kk��½�J���p��F���� ~L,4N��і��A��O&�SL���P��d� c�p�u��J�lZ,��8O���N��X�\��Q�HhR�j4���n��`+�o�^/�Kx`��w���0���tƬ�p��t�-�'��S�4ϛ�w����m
�
le��EޥP�M�E�?����J�Q�L
��p��ʾ�_�=���FR�@�	���2�ƿ��\��p�����ô��(�~W�X&^6�%͜gʋaq.U��LQf�}��/�G�H��'ێ_�SUw�����+J�`��iѶ7��


key: chroma:document
string_value:
�v�89GD޿9�pT1��u���2�	��M�W�R��^��j{���Z����$��+_�űi������o���C���X�??u��9�s�j�ǥӊ������W��W�L9E����������"��tV��dg. ���y���ZW>���������ܼ�P�#���=d[�t5[�|��#;��~�g�_V�̴��I~�����_^6|H�T�;�� U�����^�i��g[C~fؾ��{#���Q��K7������6�� ��?��v����{�
{��a'��s@�>CM�#z�7��>xd-E��μ�Nd~��c�����~����{;��x�Dy��K֟^-�R)WN&���[=�01+=��ĮJ�p��5�/��sr�X!Q$�x����B�Fx���mQY�}���*���pߌ;_>z{{�k
_�gL�YT���w�N	�p��G�j`~�̈k��G�~rt���ùͩ]sI�1�9+�T�-[F���9�ZĠ��=�N�h�h����� �!����6�o
 fZ��!�?�E��?��/~����S8��mC���q���ȂA[�&3]�-��0l


key: chroma:document
string_value:
$y2����]M�����ȱ_���I�y�^C�aQ�M�T
st}��dY�1�3���8���qQ�L9c�fr��x��2R��C��3Y��E��ӛ�����~>3e~���\������:�����
�9�ʈ�>N���_؟�}h�Dk�;�L��j��S�S�J�=��77��v�sHdCt���/��Ŀ��}����b�nȍ�ˋ'�������ř�����'�~��b���I�T8�����":��� ]b�cU�CU����26I�H>"��I��ɂCp_�&���%�nO֝�l�1�.�CH"�F�Q��ǧ�5T^�O�O����uh�h2����d0��m�<9��#�;zqA@�7#�;�=��c�����qZ���Z�����\�K�4�M��ZD�lA��5ZX-R����jjɮ�&W��h	�|��4�����%���I���^��pI�%�C��/�A\x�{�i��Z���JF��X+@�ZT�����J�a�l�<���s�m���m?.�>D�S�0D1�w�/g�-�	(����{���h9B��ŉ:*tl@��[�#���p���y��%����0��I��E^�~m�,[����to�RJ�ם����������/�@�em"��ԛ�Z��g��3�?';kO���8��U�L3�m�[+6,8��?}�����<�����D�8��3]�f
��|���Ư&���/��l53�jj�$_�"�
��c�7�0����ÙMp�C�Gu:���ZbK�M�6/ �m$.���Ε��p�"�HL���n��B@cd;�1�[C��ߛ���@�(\I�0p!�$�><�u:��X}���#�9�SX�ܓJ�T�O[�D�LE��Dm�v��>�B*�b���֣�V槢�ru>%�͕���@�\_�/�1�����I�9!pp�s&����?:��pX!�B9{ţ���3��B 
]���d6��{�J*�43>��b3���-#E#�Bקw��8�܄i�


key: chroma:document
string_value:
]���d6��{�J*�43>��b3���-#E#�Bקw��8�܄i�
��d�U���MD/�֮�B���}���@lI3��1��eW��_��7J@ĦE��﹁x�ov�r������|�hRI���� �ϥX��e?�Q6��1��2��{P���@P`�#G)Eݚ�����`�>���]�8�W�M��[	 �!4��B���2��F;��M��k�d)ݯ�L[�
W�����J&f�w������Ɔ�
0�	M�ѱ����$��i��=U7�Wj+,�>�q�~��j���0{���F1@^��(��J�y+`��F�Y4��	_�P.I.�^����>M�+T[���Rgf���wdl'�h�S�ٞ�Q�>[�8F���U�K4��ր�e?k�����M3��KX%���eE�
)�4�ț���)��=�)o�}�|��kju��O'F�_����t�2Y4q�j"w;)4���i ؖ��G}g�r�U���Hʓ`��db����s,*m��R���<��'��_��'�cE!�>F*%��%ۇs�B1�A+Ե��ǀ(���rȬ~�qr*	X�����5<���|���)��5![�#*�<�ńO�#�_��'�%-�٬y�09-v%�nG�X������p��/eT�L�@���q��bZO*������M.�[l����q�1{�I³h�A~�%��6pM����W,��Q<�$G�/Fj)<�_�O:mc!��N/��"�W	њ�+��
4��覙`%i�?�]vѠf�J|��	\��HК	��L�p�m�bX,��66��hP�W[��b&F�Ph�l�9�8�@�����|��.}�b���ľ��3������}��9
�������{Չ����{6���X:f�l+�5�R�r>\�r�Z{ܾ�|.B���Y�9o)y�����<�1���������t*��1�A)~��x�
���頛W%RFh�J�dmO�k���BN0�R����


key: chroma:document
string_value:
���頛W%RFh�J�dmO�k���BN0�R����
�L�~(!�W?�S�"��kvl��F�c�v�/���n#񫞱6��Y85_��KU4��40aR�f�Y8�GK�:_=1�]1����x]&��b�;>��k^�1^,�G�ZSa�[p�;��A��H��6�`��e����ȃ����ռ�i?ž+�w�����N���L'z�//9����5�QCzNȖp�_�l�K�}���T���?�x��*aH�w�5�=��lա5z˾�C�`���d��ruǕ��\G��H��$,������!�x3�����<ǿp�4/�.BR5,��C��n/�6���X����4�:��QcLf ���~%�y��`D��QC��1&:Z��84�������|p�����[��<K�����?��O�ɭ�Zʀ@b��k�H�%ݠ�%�a��o$,%����.ߦ�=��!Yz�>���ϥW&�׭C���>�k�Vzr�z�<��$���N@='��%�:��Jk
�W����WS�{M�Bm�����=ߚ{Ҷ���1���7˛ή搮|g?_���S�L
?Mʕ /(	�a�VR�9�B!�QQ�A���?#��d��q5���I�x�j"������̑6��"�`VV����FuT���G�"���bR!�s&
hVv���lP��!��֤`������#��G��5ܢ��d~��
��"đA^ȱ�{j˔)p�(����o3�f�tk���..y8.�V���	_܄S��p���


key: chroma:document
string_value:
hVv���lP��!��֤`������#��G��5ܢ��d~��
��"đA^ȱ�{j˔)p�(����o3�f�tk���..y8.�V���	_܄S��p���
��о*%t"��sp�o�L���@�³
W�R5�B+�8�9>�¥D��-����MԔ��9&\�<��\w�$��M\^9_D���a)Q.�v(7� F�p?��)EYw9r�.a���~X7Mቈ��|�9�]5��&�$ێ�|���|�x���18UH]��˓<���^�ǲ�Ba�������8��T5�����Q���(����f�#�*m�e��n���w�l�/�_dPokT>�����z��N��k�da{a��#[��y�['Vb�T�}w"β�{@��H
��y��B�M���I��8�~CC��������=$.���J3��Ù$_��+���
���)�)�����2��'�.�x�V�%/x�E	�xv�$uT��ܝS����
.�B���c�>��Z���X͘��)�Ӣ��Y�~'�`<:yU�X��!:wR�&6�Gv�N���2ʘ�eibF�Z�I󖿖�t�>��P�'4�^c�*V`�`xl��K�1��߈�/��5��T-\�:��������1�>>C�h�C���e1
�o�	E�~����ib�!�p\Q�����*v�G����J��.��BM�6*���ݨ���r�#�s��4�FFA�}���2&�i�<�	�@
���)�ks����Jm��,[U���8��)�4��dj;
�C�;��w��s8��>ZQ�~��-���
b�݌,w��F���",�!~R��
�N.�zasV��_�7rŪ�q�2i!U��N�{��jiU������5���`?�W


key: chroma:document
string_value:
�N.�zasV��_�7rŪ�q�2i!U��N�{��jiU������5���`?�W
��k��rlg@G�T';ܧ?8�yG��t2nf��Cᨏw󱕩�q�(~��kUJ\�+O��_��(-
�-:���*$�M�������rl� F��B�^�2��9�����M[,t[��}F�"jv��n|:;����}c��vÐAx8?�݁�^����W�����R��ӻT�q�����$u��X��(B�����M#��O*NLπޱm��+�{��K�x1k�٬k�� D\Њ���AW~`G�pg����zsª�Mj��x�
�K���5k�4
�Q�ݟ>r2��\��=�E0�x��g(�&��v��U����9D�H���A�gS�FD\	��ο V�(Bhs��ʱ�bu�@5��Hg��2�b@�`|�lZԵ��������3���55���E�ȏi3¦�~�Myј�6�m���Yz�XW<�3/�ӄg��)�<2������Չ���{������T��2�~�����ж��3�<������Q��ɀ���*|T�\�����p�n�X������-�8p��)�����'�@�R���~���Q���S�gY$��,#2<��V��N�F�"�9݀ꃜׯB���M���WA~{CT��=�i�5M�_�i���������xgG�����L.oD~�d���d�.L��/_�6]�*�Y�^�����ZԨ��P�/�I�:�W�ʆ�
^7��p�`��K�wn���
�J�����̟_��߀�՜�g����`⾢��"$�)e��{'�s�T��K�dd9z{:({>:�������T����iݎ7��?�����/9!�I[����w��.?&s�n��eci��Aؼ�IL���P��;(��(���!zIiqj�xb�t�H��8ܖv4E����<�D���W:(i���~s�AU��[$�}*p�i7�(


key: chroma:document
string_value:
�W-4��d��J���|��c�6����g�����b7���K-�1�����	ey�T|��*
k�mm;K:�oU��(B3H�g,�w4U9�R�ѕ��y��I��M�	����kjC����o0�O�L\��
�sX(wi����֌GT�@=wa �H��+���氼*.��?V#�H�{uj����Bta��H�b���R���2��qb
�f����+j�[4�o�w1�@m��#�����$q�����'�Cx��M�+����u��R ���P�������v����wv!<� ��Z�4A����P\���@�����J߶�8il�,W!c8�9�e��ȁ��ʪ��X�R^�3��\Mj߰i���O6|�q��h���1�W�������ߗWmw�1s��~{9�܊ҝ��P.��贉Cd���g{�-��De꿸(�JI�1 �<�Fx�G�%w�kB�x��!D�gl'�.���(������ga�� gS�������NN�"�� �6C��3]�Y~1ݲ8n��K4x���8�5\�ɽ����kg7%n�s3�����^3������܀)��W��6co���R�Tp�SU{��6?n#��Gs��|�=�z�Qu���้��XT��ZJQ����}%�&!*��$/I߳�Y�r�q��}����ȓ�e�Q�L��u+K�k�e�#��M��^����栗�˷�����}��+��X��_v�VE��ԗ��i;��L��^�4뗗��m��`#���l�����G�J񟅟���	n��@�f��Q����}�l9by���\�����V�_��}g���1����)=����Z�|��a=ػ$|wEO��o_��$Cp�
s���ww��VZ��6S��iV7����;�A�Eu��$��:�u%��&�w���_�!����e���OzQ�;@J�pA�/ת��)>&ZjEU�^����AC\����-#Z�=ӝƭ�d&��>�=�+��U�ȷw���?��^�/<��+]��GX[B����_�s
��-����;Ѓ؀


key: chroma:document
string_value:
-�&,M���->޴u�m���V}�N����"LЏ�-H�i�3⊃����-�
�D0Dƣ�(1�o)�����ueh�
��!K�u������ݶ�j�z߽`/�(j�=��ܱن�N�
+1
j0��j+PϠ�人D�H}�����!��NƯ�������\g^*)��{KRyrB�u�}�.�B!@@&9H&�G���D�;sAע9G� ���i���#cτ�Ju����o7��Y��nz���I7|����[4@I!�Bv�B*�r����(�o/Z���,���%.gE��
4�wÍ�3+ѣi�.�CQ&�-���f1��
|��h��K)�Q�b��v���0����VF����s�Ճ����훆O��,g��NmB�ɔP�\#����H�5�f�,��n��r������4Շ/E4	`�Z�ӝ;+���6�+�:浖�a�����_/'VXl�`�˅�!�ԉ��\���s1Mj��rV�J&� 
9�����g��!�C�4Rz�uK0�2��ǼmX9Dޔ�,��!(��a$dy�y*�Nɀ�O�9���u����R>6!�.��G�n%%�%���z����"���VD�0���6��HN"Gk�\4�o�^ΌC���HC������ʷn�3b�QB
�(L�&G#��6�v���ԁr�o��PE㎉�<�ot�q����q���|�O\���ջ�f?


key: chroma:document
string_value:
�(L�&G#��6�v���ԁr�o��PE㎉�<�ot�q����q���|�O\���ջ�f?

P1+��~'C)S^Vj��\��)Za�/�%R�Cd�xo'�|i��t��.|<���F���=<
�Ci��iGi�NװY�5�op|��a�w���("���Ö1i�Bx$п�*�e��Do�hc��A���|��tC�R��b��g���o��3�-)��b������[�	3�,]6��T��j�X�ax�(r�����z��`L%4�
*�7Vן�>e.�>��P.7�
U���SLR��A�9�|Jy��X�0�_W�D_�ϞL���l�	�5,g� ѐ��/�����Y�L�>�j?<�#o9�S�2�X��(��4�rF�9�	3
��`%��,�#_v�;2�3���/{閲 x�*xy��L��0��0f��S��XA�a�pd��1�c��*{�:�v���/�/}�p��^~�
���ڊv��p�Scǌ�e�Yn��=;�Ai��2;��9LJ��}W������-6Q���#�G�p��� &��y�D�$
�=pҶ���Wr9�x�t�y���'~�����~�Y}i���gG�lB���'�<
20��1�d���HXo
A�L��~�f\О���n�Z�FE%����b�]"5~]#�e�g����^=B�F������F���:B8�}�G�Js����Y����]�hN��4WI�7�&4���0
��>�Qyqc^?�0��ۉ(� �B�#)�#k�᠖���q���~��t3Gl�K\���>T�uD`��?������.�|��#n�@,�G��[��Fe����v97
�:�~>��ܿN�[fr�+����~�|b
���F2����C�:�R������<�h����f�`mrg\�8qڐ�I�NR�^�y�J�$ۄ^i�;�͒�6
��&��3bA�����X��)�u>>{K��&�5�^~���Si��1�


key: chroma:document
string_value:
�
�k��,����?�D����Gu��>�g�|�e��(��2Td�Np}���)�'\������b+����Wh6��I��9�k׌���d�V���omhǽ��g��H���݀3[���{�9�'ڈ��LK�����T5M-4M�d�=������������c���%rndd0��-��#�;��������;�)��˖10>7�cX�/?l�j�����Q�,��[��Eo*�/�>@����ܣe��1���'[~�с���]�@mY:��QS5o�N�Z��~�Uoq�V|S��[օ��8�i.N��H�A��D�����f���x�Ut}_�r9C�w�hT	�\��r��4E��z�3�F�#2���rf]�k�@�.!y��C��c�c��^N-�f�|�*۶;j��:hh�
��8��������Z��-C#˴�oD���5Gv$�8����4�Q�!�����r�<���$���m��9�j�~��[�0lb�	W��Y"s5ܖ�=C�{Y�ĭ�
ۘ����8S&��^I��]���@.\�Hs�;l��A�@�p�R��2Gה� l�w�����Z6�~�Wy�t����rrK���Ў���7������Mm��IR��(\�܈a�Q��� �"��D$L�{�@Q���	�=�:hw���&�;쓪%!�F�J�O}kt砤���>t�(/���1���%y�O�'��ޔZ���=���R�E��;o�63�zl��H���'L'ݣ��_�'���d{�f|�v��L�'j�~�h<<� FIrh�H��Z[5?O}�*��˷�-�H������YP�_hw�&K���0�B�n����lRS-�����Q�?��!��)��d�cG�؀��w�Ij�]�d


key: chroma:document
string_value:
$�]M=|Z�C��)���>��9��c�=����ޡ`�*��,�l1:E2ŷ�;���V��~��)$=x(ZS!	����@,-T�hS}#��8�7ur�Z�I���֎���<�?"X��A8'a��FmS�lԯo���Az���i�8
;��X�G��ʏ巛��Lg]|>�� �O|���v�f���)}�u')���|�A��I��,0UM�6@3.���Xt+�U+8ۜ�?��K�l�T�n�b�{��
M���z��Шq謒�q�~!ui|۴�&��j�T]M5����������W
���>�C��CS���A;�PG�<��~�"��q�s��Q-��ɐ:ee����hZ��N�!��yrR2��l�U�/\�����=-ָ^=`�F��������3�5���e4


key: chroma:document
string_value:
��b�.�����g�{�JȝJō����PQ��%瘃�^�4�����=�Ǩs�\�Q���!x�{��P���x��쩃5uw��3Lk�@
n;�
��0PC5x����<�u��G탙���?#��=՚pQl@��!�ʇ������:4���l�>q�Κ�Fc�yUöyɹ�N=x��p~��5%L����$��Mby��,j"�L��|��{��L�	Z�\��ak��O�.�*;C5��oVP>��|�y�uUxbAA	RdX\vS�����QU���O,���������"�/������������I��@�s*���M�}Ҍt�X�բ�Pu�k%��읔Z�'�2��@T�1�x`X	MIZ82�̩���	����k���q�I����PT���*B}��\z�V{Ǔ����Оkq@�kEu9x|��t�'>k6�4�SǢ%Zx7 B��'��~�%��,�,�658|	�o��ᠱy9�@;/��v�*j�$t�f��;M���m��1�hj=��PV�D���F'؈twߖ�D�'��l�}OA$Q�U�:er�٧zP�3$FD���C��w�֡!Q�."�i���b�aUOc�����O'Bl���O��*�n����ؑ��]S\�;��S�uWi�A�ɿ��	n<���lb�y�P��60h�����DzI(��w�3ݳ�^�p#$F��*�i�R⑊)��2@$�Pj����}&j@�
"f
A��j�TB$uA1 .s�Uq�S'ԄH�DX�����d�8m�	I|�l�< ���0kڗ��H�U)$�4�����������\[��H����[��*��IZ̧�A��TR%5`�9�L��%�
-�"�������!`H\6	ܶ��
�C����5&


key: chroma:document
string_value:
-�"�������!`H\6	ܶ��
�C����5&
�s��A�Et��V��`^�a�غKÈ�K{�Luӣ����OCq�j���G�"K�+�V)�O���X�Gz9~�,�=��gaJ�lȕV�d._.�j2k5�5��F3H�T��M}�nn�6�81S�Crd�1ۄ$��FC�r�����};+QL6!e��T���Ƿ7}��:�̈��į�o��4~��ס�ݮ�Z�@Y?ŵ�scL�P��w�$SY��!����;�HhL�l(tF�嬸���F׈6P��55��'�h̬���О�\
i�\�3 �	�=��-F�,�`�C�&��{�^k��G��1�2�dtL�w�Y!K�0�D(�gr��p鑯tOX��JMQ�+�����O5ߴK�9���`����ۯ�~
�/1�I�B�]�����U���jH&�g�bꊢ�t֕��,��T6nų)#�=��P��ҋ�_��K�H�����R�F�)Z��w��f+�t��MӠT�������r���D���q���Z14�I�&+M�=�
U%�c��,�T�V*��
����E�jA��Ԝ�V|͛�g�,Q$�$�Ӭ�Q'>�����! ��]�~�z}�Sݍ5s��A�c�5S���*N��%��wsn�&]p�Y�ٿ�Okm��fܟr��M�������$�\OԔ�]�)2���[�_'�Ԧ��U.M�����������ȏ�O\�1SQ�� ^����5[�j�:��p
^,�����$Ap�,]P��W�"�)��p���7d�kBЪ��r�����pw���Q�꽘��q��n��P���q$��
���)����9��r���m��Ez�f��<���3��^�W�l��ID:{�_OO���g{�޷�H-^}ct[�Ӎ��Up(�ΐ��mzutz���a�xz�帴Q!5fೈ�P#T�����\��W��G����u�X`��Yef ���F%8'DPw�}(����~��=z�����0�׬�
��"<*�P


key: chroma:document
string_value:
2��Ϛ#�y��DO���-��	ۿql�� �`�p��2m�D�ĴD7)}��M@\+|}Nd:o�2�7�l�]��Y)�&��,F�(�9�&x�&3��S�]ⲕ����b�zs:���.����i>2ĬJ�d3]�m\;>_���i`���$ѹ�H����hH���QMU�q��U!d�	e�Ы{O�Ji�Hّ�7���۫�)��e�TDI��u��=Y��ň�ӝ'�u�d
��^�(� ��t|�Mf`�S�@�(�0@)�sH��&�~�}�|�0Ύ���Ȱ�4���W��h�my������s��]p[x3U��^��6d�b�j����64Y�;�R�|����o�.�����ߡ"jp��b���ׯ]̍�,Y�0,:��v��eB���9��<�,�[�
e�(;��[X%�G��1�F9D 	�4��X�q�㌔0���~D	n^C�=�Z%X���B���ݶa��2&��A��FK!�F�)w��fF�:jB,=�p�L�wo"DJ�d�-�K���H�r�3*�?Uلa)A���ɾE/A��'�Y)	i���L�� $����|I;�c��\�o�d�-~K?�N^���E�6�P��;���vg�:�g�Ь9]Vw42^^;�|ʰUzMc���W(�	���^rk3
�X�s


key: chroma:document
string_value:
�X�s
�چH���=��ǓB�عqY`tu�V�6%h�
��~�Gv.\f���{D�-v@�.�βe3���It&�`��(�#_/{�'~��ʭ�3��\��>ᒲ"�x�?̝hqe����1S>�P5�j��S`���Y@����=����h�o0�hs�P���,��͇O)0�'�C����f����Y�r����R p�B���;����0���W��$���-�����-����>Fb�h7��-d��������//j���י���~���~�Y��=�}�����7�6��>*�6b&q1'�d��^�Y�	o�A�0BMSχ��e���2�VG��c�Z��KwN�ED��k�5�G*�3�����ǮA�Q滘��z۟n����F7�ƍV����5襩ش�_nvFÏ��Q�[8;^�3-���ٸ��Z	����ˏs�5>fN�9-�r~f���"
ʠ]�ۯq��%�����!�K�,��M��ӝ~�\�T�P]q;+z��$��c�̫�_4^.��SH��Z�R�%��p�.�4���@XE����j�)�噆�
%���l��6x;���HM�1n�j3%]
�,�֡F���
�IG}�ӡS�?J��a��1���'e�֥����P�}��?'��f�;3��-����@yq�����Y`W"ؑ��WPD�2�����m!���q:��B`�,�:CY�r��8TV�e���/��0�y�p
��q�x���0Y����^��������r}�Vt��������՟�'���^���p�|�W����q�e��]��c��������M���� ���7�Bd+AVW0�쯪n�������&o�����7MkB�t
��
������� �h`-D��l	"���wvD$�?�ճd-E�yo+Ƚ9C�k������Δ�����yh���M���8��n�(���Z�-�Pm��D��9
uk�V#֪�i�2�
Y#� 5��\8�16`0�����͆��RĖ7C	�b	�


key: chroma:document
string_value:
uk�V#֪�i�2�
Y#� 5��\8�16`0�����͆��RĖ7C	�b	�
�����S�5����'��"0�ʴu��vР㓂�[�������UGrcS ��元Ec�F�4�ήj�-T��t�e�쟲������+�=��!!=���D���څ��B��eK��ޮ69���D�W��_���(���߼a��fM�ƍ�g��U3>������L��Z��z���6(srZ /d�ND(�ovy�p�Գ���1�w���'�,Y8�AQ��+�C�N����� ��H�o0@����)z}��ښ�	)�w�g�	M�R��F���!��S�S��0;�F���F�ۑL����L�@l�PVɮ܈*�4?
�w�/��&�׍�-:z�伈����N�1��P��,�YHE�g��\�g@fx��{~Ya>k��YOj��Τ�7UkV+i>
�9Fa����f-�8�
�%0R���C����ۖxK���h��I����ݬR^��#�f
,ks�1���I�n/{Y���K�7�%����6��P�H��l�/��W@�D9��U�$B;#h�2�D�Śʽ��ϲGUE���-.���t��aշ)��{�3��j�����S��f,����fH�eǒ;��q�ߝ��p�H��8��Н�&�����UPvRZ�F|;[�!PN�~�Q�F!��
���Y�k�Kp��..�v�Ƒ�T��!0Τt��6������>Լ���g��,�6o$X�O����ۑ\��l�:����pPB�)<�l����VYPD���z+��6�4H����ؽ�'\�Xn��4B�


key: chroma:document
string_value:
�X���>?[�m���Db���Ghǯҋ~��C#�S&�/�O���hu��s��V�������)�5�|w�PC�V�T��yf�2F
��;��זGy�hx�b�q�b7ﺗ�@�g#�O8y����2�6((�z~-���%
]���N��zַX�����[K�J�������[]�%��Z��J��}u��d]uC���Io3xK�L���ے^^����յ�Q���qA����~��!����C���5fR-w
��9�B����"Fxd�6�laz�U�گދĊ'�:�0K��\�H�Yzw�z������B2�OyK%Un�}���U!���@(EM�49X���tS�j�{�s[�O�$^����^���ا�B1uN�UQ�-g4c�,WA��	�\�H�s�:m"H`����"��~���Q��Z��<
,(F�?����|�"��G��t���4CPr���&f�ǫ/���}%"Z��5	�!C���ܾ�(m1��Gށ⿍��V�>���N�d�Jt�a�uKc�G�x�+6�N?���&�*a?s�&Ku�6�86��:&:L�j앱���T|����Z�������5b�o��k++`�I��F��������.^�}, �&o�Y�Y�����r�41�1�,oi�u��vg�	;hB��,�@�~�$�l��n��Y}*G��̲��?���j
X�y�O���;��rPn�E���.-/�T�i�%M���zh�p�B���V���hY����VApTAR�p{�j��=�.��J=h


key: chroma:document
string_value:
B*h	_@Rg��p�
S Pf��C��tl�f�$�p;x҅�3�=t�ɮ��֪�k�M�Du�zb���YN��)�,݅��ĔD�#�LL�S�R�����Ό�ؕ�v����X��87G<�y�?Q��:��Ӓ�x�&#���2�3�.2��W��?'��Ϥ�c0q�Ь�I�:�?M�ea�aHb1.}�V����ӑ�աV��[&���N�v�,8�D?���G������c!��	boP�{�f���]���p�͓\�L�������s<�r�&��B1f�:a~B}b�" �ku������w���&[�
�K���?�j����)���囿m����6���|�38�� �C@�W_z	AҼ6pl�&��!UA��4�L5�ȡ���B`W]�BZ���
A��a�j�º|����Bt��f��d����F�^���g�uz7���A�3
�g��Jxcm���
�"T�%���X�pn[M�����,:C��L��eOK�xģ�9^���VJP>aQ�М�� )
��[�3l�


key: chroma:document
string_value:
��[�3l�
^Vr���DB��6���0׍�R=���5��DN��q����0Ƿ��u_o#��h�y U!�E�:����G�zED�,�7��%��fп-X�	C���8���==x{�̲�����q8��Dj�KyP�4�<(X�u��y���-��(���!:�8�c�G�|�����Z� �`���
o�!���?O���L��7���8�|��=����76�{pD��x"�3!��\�s�{�g�{�*2��3~fv-OԗF��/-rd��Z���.�.��Uj)X�(AX_��!���#6K�V�Q5d�Y�u	BSE�2�2_�<>���WOeA���=��A-vOA�f��X���������X�e�|�v��z���ĉnv�ɓs�:iQ}�g���GH93�n|'�\\BͿ�+i��4�/��,�3�u~פ�v�/޲`���P*��B�.����{�-��Xv.W���5;x�sDtJ�SF�g��Go�T�ܭWь3�r���� �s��ȥET�&��Օ�p�z�mY����=L�h
!���t���2
���9e�\��g���@�!b%'�
��9�Pq��L�W:ht@�'��4�}�r�gv�b�Ӕ`�a'�7��E^��I�B�5Ml���$��f%^V@'�L8�[-ֱ��Xb����V���sl҄�e��6�Zh�mܯ�^���	��{��-��M�Ec�D�O����
��eAG�p����nl�2�-���~�YT8A$A�Πʭgh!Mawm��Bi��_P�XC��ev�b


key: chroma:document
string_value:
��eAG�p����nl�2�-���~�YT8A$A�Πʭgh!Mawm��Bi��_P�XC��ev�b
��I)��?jR�����QU��.��|�x����S��A�:t�Tq���lkR�"�E����nӝ��c�ݡ����tYc#��lR*R13�N��A�Q�n/�?�c3m�����R������:f/����]�����Gh���|�!QІ��"'���{ �����7ex�ll���jj[6�1�-W�������g,�/���T[���֭4�x��l�b���n�ɾ�Ͷ;�	aX��uG��+�\�v����[0����&̭��WT��*
%���⦒�v��=����X���b��xA�b�\��:��]
}�r5V�JH�����`�&���Ӿ�ēC�D����]qO"M�[��J���>p�̸���l�s~=����[M\�6)DǬ��s*Q�u���6bv�*o���G�\�Mr�����e]R��tPP%���#�p�*u{��6^Y�V�՞m6�����5�0��v1�s|��R^	r窇�ikC%��A��&c�	�:?P[�r�����zj�N|�iX�8 ��qph

�;E��jc�Y�mj
�YG;sj�C�@a�td�UV.�����2�I�E,�XM|�~�A4>2������'r�>Y�Q�V���u��rw3�L��z�z�`r�O!�z���
�sN���T�Û���T��L����(n!K�J�Nb�-�ڳZ����RDA�[����U���X��p>L���r�+��9�<�X�i�Ц`��k~!�Zյ�X��pW>��+�_�9�n���|�q�.�����.�E¤���Wҕ׊z)"��J���������/�m5��թ�o�pJ/��L|k4���q	�!2t"�k+y&�X�8����?�k/I���NH�����H[��H�Y���
/����B��Ӝ


key: chroma:document
string_value:
;`6�$��H�W|�t��A'H�3=�����|@�db�M���K��m�b����^��%XO:.a����je��A���i;&p��K�jt�ӛ�C�=8(�����5�cm���	�*��`��jv�翧O2|Ԟ]�]jW�K��^�nG�=�:����`���� �;����y	��~\^&�Ӱ�b[�%�c�a��[�hF<�Zrx$8���s;Z��|lyU����U̲ر΁ԛ���0���dY��ֱ�����B�Bwnnr��C%�ou�[J��Hy������p�T�ꬑ.H?��`}K�g^ۚ��ج]�+G
)z�GS��aq[�����aN9�	����kZq�8������$�)�ڂv ;h-�G��rlף��kv>����8>�n&6?k~y�x|�8����$�*��r<79o��*���}�?`y���ZR~����O���h�s*u���yLxw�ZTr�lWY�����-�H�q`ݥ�������e^��_�Gt�g�9��*iTU?-�<��E��c�f��2^,Zy�cL�
!]s*��s1r�����t7�0nj���.�tv~F�l��\�`���5z
�߸2p卣�A��d��g��5�*`�M�l��<��h��')ӳ(�5Zݰ:�G��N�H�ιfr��L�ՖV�G}���
#f9km�XɁ�0�}r7���] M�z�M	�e�mp�����j������:�E�x���Ec\��f����&�J8�UrV6���є�`.����a]O#��������M��?�oO`��ܹ�B��Z���o���\�d4�xo0���*�#a��<��[�{a��JwO��o,��٭�������<^I
���{\����n���?��Qyj������'��,p����x�tq�Tq/���e�լ:��j�W��� (��פ��ʩÎGڳ�yI��3Ϸ8'�\KN���`�0�w�z�^@6���ǰ�?Ԩt6a�l��q��{����଄����


key: chroma:document
string_value:
=�:�J��B�{�pC9��RP�o1���90����4�xL^��^|����`J_`@���E��C'�B�C;����)��$~�7���Z�F��<��4^|�p�y#"4���MDZ���)���#������2�R(���
�O��b��Ϧ2�E�{ȼ��Fd�ʎdl.{4�߮v�l���B�b������"���C>�<��i�㞺[�w�lq�޷2͚١��\��k`��ԠU@�!��.х�?�o�kE�0��<	9DX�����n����]��?s8{7����F~�<�_���%'@R��32���o��'oN��m�9@FP'H�f���"�D*�+�*�F���&��j�;�.���� #(�$E3,��$�:�G���e;��a'i�eU7m��4/��u?��c'H�fX�DIVTM7L�v\�`�I��EY�M���8�yY��8��y?���x?�ʸ�J�_����ސx���a�}.��E�)��Y>�r*���|�}4k₭�W�1�M��9����


key: chroma:document
string_value:
׷�l7�,a�&+b���δ�x�xG�o�U+
[5WE���yԍM$l�aP��[�q��[�G��4��<$*�Hk���s4����[����8*�p���@p·`�$�'�~�F7K��8-ט�E����9������+r�B9l�XI%�G�bmSEz�Ǝ����	�#:���N�ѡr|C��&G��Tj��P��҆Rл�E�'`��@��%��'���x��L�w����|���rǰ�����)��ǰ.���ޢ2c�/,R���1c�U�}F��c�U�u�J�F<�99�\�eT���/`I5��]�
j�.�$�A(ӱ���Q��\����Q��Jګ!'P�ӳb&�lV��?���u0��X��#*��b�f��2$z�tA~�
��'�g3�'�*A�ȱ�G:�]�@�1�(�XUv�2+.r�j��}�AƓ��ZDQCTv����eg���p[����'u
�pDq���v�C(��PZ���	+a#��{V�Vd�ݖ�w���������Qi΃���.��%c`}��qی+1�vۆ�r�@�E
mi���NK�2�É����5m�oa2�:�=A����N��<�f��V0f��


key: chroma:document
string_value:
mi���NK�2�É����5m�oa2�:�=A����N��<�f��V0f��
N�,o5��,����<c��#쵟TpU���lް���]
K�;��^�S)	�'_��'�-}�>�(!��~@�Q�1��チ}V�a�x��B5(o��e�*/��8�}�+-����]�Y�ʹG�׾�+=;�<ޠ.��mC�]����I��@���ˌ�W��+��1|�C�C7X𬨎c$v�$9FGd��U;�v�ߞR�+D��K��w�r/��m]��1
�j�+��%�gUy$^ɡDM�q)�MP�v�aH��c��x�>Ҁ��ټ�.��y
!�Pd	Z��4[�Q��Q��?��f�+�cxб;M}���l�b���@�-����DEk\���!��c���I�uX����ˠ��b[��ޔU�O� �<ܑʊ�b������ꚭ���M�+�]���Il��+��Ç����pҕ2O'��9��>�Z<��9McƦ݋w�٥�P���W�҆��A8��,~>����DU��j^v]3��n�������JN�t������,�;�+
FJ���df�.��6��i1+��)��6�0�~�-�0�}�l�q�{JT4�0��+��Mʋx���
���t7��[�srM�J|w�%�c❳��9j.�+�ֹ!<��>����{����ݴ�(���$/bP
�j-�ƈ
�ހ�Y�]�$�V'��u]����~�̰���ۋ�b�p�v�׻�̫.���'�бX�;`�r�����M�Bo���\�`4��1��m��v5]3�ԩ��X.Uq��q����֡�$�S\.-Ɍ��Kڹ�*O�:j[U
�
/�})U�WGo�]�__� ��j2�����ⱇS�u�@
wd}ӝD��r�:hn*W�Y��c[��a��/P��


key: chroma:document
string_value:
�
/�})U�WGo�]�__� ��j2�����ⱇS�u�@
wd}ӝD��r�:hn*W�Y��c[��a��/P��
��~�1\����o�9��������|]��}D�����L�?w{-��_*�8}���y�_��_Q��Ww�5�a/0�L������]LT��I��M�h�9�կ��ؿ(��RX��Pz/l���8���KN�PD	��-7/~0���en�}��
cƌ����[��N��J���U�g*ePI��Z��z��Eo�^�W���8aX�*$�D��$	�p.�m��P+2��~��Z�ԛ>�|r�I�}���Ȯ�Y1��F��#�r������h������%)�&^?x1�%�o�^���v�\h�<���F�W�&���M_�٢.bj0�f%~�ǣ�D��R�E�Gg�lP�������[j����]l��K9��R-}b�*
��g��T�;��i�=��EF���
�g,x���-��(�xp>>5��}BW�ƗaX�`?nˬY~I���:�<>�K.;�T�\����u���	�{�Pe�6<�YFGA[0ޱ��J���}���/7��+�����G.=+����.á��{l�+�$ͭ�D��M�wKf�$��<1�|���	�]��5�Tǿ��ɯ)�ʵ���ǟ��ӅO�ΫTZ.


key: chroma:document
string_value:
Overview — Ray 3.0.0.dev0





































































Toggle navigation sidebar




Toggle in-page Table of Contents












Ray 3.0.0.dev0









                    Welcome to Ray!
                




  Ray
 




   Overview
  



   Getting Started
  



   Installation
  



   Use Cases
  



   Example Gallery
  



   Ecosystem
  



   Ray Core
  



   Ray Data
  



   Ray Train
  



   Ray Tune
  



   Ray Serve
  



   Ray RLlib
  



   More Libraries
  



   Ray Clusters
  



   Monitoring and Debugging
  



   Developer Guides
  



   Glossary
  



   Security
  







            Theme by the Executable Book Project



































repository







open issue







suggest edit
















.md







.pdf















 Contents
    




   What you can do with Ray
  



   Ray framework
  









Overview




 Contents 





   What you can do with Ray
  



   Ray framework


key: chroma:document
string_value:
Overview




 Contents 





   What you can do with Ray
  



   Ray framework
  









Overview#
Ray is an open-source unified framework for scaling AI and Python applications like machine learning. It provides the compute layer for parallel processing so that you don’t need to be a distributed systems expert. Ray minimizes the complexity of running your distributed individual and end-to-end machine learning workflows with these components:

Scalable libraries for common machine learning tasks such as data preprocessing, distributed training, hyperparameter tuning, reinforcement learning, and model serving.
Pythonic distributed computing primitives for parallelizing and scaling Python applications.
Integrations and utilities for integrating and deploying a Ray cluster with existing tools and infrastructure such as Kubernetes, AWS, GCP, and Azure.

For data scientists and machine learning practitioners, Ray lets you scale jobs without needing infrastructure expertise:


key: chroma:document
string_value:
Easily parallelize and distribute ML workloads across multiple nodes and GPUs.
Leverage the ML ecosystem with native and extensible integrations.

For ML platform builders and ML engineers, Ray:

Provides compute abstractions for creating a scalable and robust ML platform.
Provides a unified ML API that simplifies onboarding and integration with the broader ML ecosystem.
Reduces friction between development and production by enabling the same Python code to scale seamlessly from a laptop to a large cluster.

For distributed systems engineers, Ray automatically handles key processes:

Orchestration–Managing the various components of a distributed system.
Scheduling–Coordinating when and where tasks are executed.
Fault tolerance–Ensuring tasks complete regardless of inevitable points of failure.
Auto-scaling–Adjusting the number of resources allocated to dynamic demand.


key: chroma:document
string_value:
What you can do with Ray#
These are some common ML workloads that individuals, organizations, and companies leverage Ray to build their AI applications:

Batch inference on CPUs and GPUs
Parallel training
Model serving
Distributed training of large models
Parallel hyperparameter tuning experiments
Reinforcement learning
ML platform



Ray framework#






Stack of Ray libraries - unified toolkit for ML workloads.



Ray’s unified compute framework consists of three layers:


key: chroma:document
string_value:
Ray’s unified compute framework consists of three layers:

Ray AI Libraries–An open-source, Python, domain-specific set of libraries that equip ML engineers, data scientists, and researchers with a scalable and unified toolkit for ML applications.
Ray Core–An open-source, Python, general purpose, distributed computing library that enables ML engineers and Python developers to scale Python applications and accelerate machine learning workloads.
Ray Clusters–A set of worker nodes connected to a common Ray head node. Ray clusters can be fixed-size, or they can autoscale up and down according to the resources requested by applications running on the cluster.






Scale machine learning workloads


Build ML applications with a toolkit of libraries for distributed
data processing,
model training,
tuning,
reinforcement learning,
model serving,
and more.


Ray AI Libraries






Build distributed applications


key: chroma:document
string_value:
Ray AI Libraries






Build distributed applications


Build and run distributed applications with a
simple and flexible API.
Parallelize single machine code with
little to zero code changes.


Ray Core






Deploy large-scale workloads


Deploy workloads on AWS, GCP, Azure or
on premise.
Use Ray cluster managers to run Ray on existing
Kubernetes,
YARN,
or Slurm clusters.


Ray Clusters





Each of Ray’s five native libraries distributes a specific ML task:

Data: Scalable, framework-agnostic data loading and transformation across training, tuning, and prediction.
Train: Distributed multi-node and multi-core model training with fault tolerance that integrates with popular training libraries.
Tune: Scalable hyperparameter tuning to optimize model performance.
Serve: Scalable and programmable serving to deploy models for online inference, with optional microbatching to improve performance.
RLlib: Scalable distributed reinforcement learning workloads.


key: chroma:document
string_value:
Ray’s libraries are for both data scientists and ML engineers alike. For data scientists, these libraries can be used to scale individual workloads, and also end-to-end ML applications. For ML Engineers, these libraries provides scalable platform abstractions that can be used to easily onboard and integrate tooling from the broader ML ecosystem.
For custom applications, the Ray Core library enables Python developers to easily build scalable, distributed systems that can run on a laptop, cluster, cloud, or Kubernetes. It’s the foundation that Ray AI libraries and third-party integrations (Ray ecosystem) are built on.
Ray runs on any machine, cluster, cloud provider, and Kubernetes, and features a growing
ecosystem of community integrations.










previous
Welcome to Ray!




next
Getting Started











Thanks for the feedback!


Was this helpful?




Yes





No



Feedback

Submit


  
    By The Ray Team
  
      © Copyright 2023, The Ray Team.


key: source
string_value:
https://docs.ray.io/en/master/_static/styles/sphinx-book-theme.css?digest=5115cc725059bd94278eecd172e13a965bf8f5a9


key: chroma:document
string_value:
/*! sphinx-book-theme CSS
 * BSD 3-Clause License
 * Copyright (c) 2020, EBP
 * All rights reserved.
 *
 * This follows the 7-1 pattern described here:
 * https://sass-guidelin.es/#architecture


key: chroma:document
string_value:
*/:root{--pst-font-size-base:none;--pst-color-primary:87,154,202;--pst-color-admonition-note:var(--pst-color-primary);--pst-color-admonition-default:var(--pst-color-primary);--pst-color-info:255,193,7;--pst-color-admonition-tip:var(--pst-color-info);--pst-color-admonition-hint:var(--pst-color-info);--pst-color-admonition-important:var(--pst-color-info);--pst-color-warning:245,162,82;--pst-color-danger:230,101,129;--pst-color-admonition-warning:var(--pst-color-danger);--pst-color-link:0,113,188;--sbt-font-size-regular:100%;--sbt-font-size-large:112.5%;--sbt-font-size-small-1:87.5%;--sbt-font-size-small-2:70%;--sbt-sidebar-font-size:var(--sbt-font-size-small-1);--sbt-header-article-font-size:var(--sbt-font-size-small-1);--sbt-prevnext-font-size:var(--sbt-font-size-small-1);--sbt-footer-font-size:var(--sbt-font-size-small-1)}.sbt-scroll-pixel-helper{position:absolute;width:0;height:0;top:0;left:0}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin


key: chroma:document
string_value:
;left:0}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.d-n,.onlyprint{display:none}@media


key: chroma:document
string_value:
print{.onlyprint{display:block!important}}@media print{.noprint{display:none!important}}.col{min-width:0}.content-container a.headerlink{opacity:0;margin-left:.2em}.content-container a.headerlink:hover{background-color:transparent;color:rgba(var(--pst-color-link),1);opacity:1!important}.content-container a,.content-container a:visited{color:rgba(var(--pst-color-link),1)}.content-container h1,.content-container h2,.content-container h3,.content-container h4,.content-container h5{color:#000}.content-container h1:hover a.headerlink,.content-container h2:hover a.headerlink,.content-container h3:hover a.headerlink,.content-container h4:hover a.headerlink,.content-container h5:hover a.headerlink{opacity:.5}.content-container h1 a.toc-backref,.content-container h2 a.toc-backref,.content-container h3 a.toc-backref,.content-container h4 a.toc-backref,.content-container h5 a.toc-backref{color:inherit}.content-container h3,.content-container h4,.content-container h5,.content-container


key: chroma:document
string_value:
h3,.content-container h4,.content-container h5,.content-container h6{margin-top:1em}.content-container ol p,.content-container ul p{margin-bottom:0}.content-container p.centered{text-align:center}.content-container .footnote-reference,.content-container a.bibtex.internal{font-size:1em}@media print{#jb-print-docs-body{max-width:90%;margin:auto}#jb-print-docs-body h1{font-size:3em;text-align:center;margin-bottom:0}#main-content{max-width:67%!important;margin-left:5%!important;padding-top:0}#main-content h1:first-of-type{display:none}.container{min-width:0!important}h1{margin-top:1em;margin-bottom:1em}h1,h2,h3,h4{break-after:avoid;color:#000}table{break-inside:avoid}pre{word-wrap:break-word}a.headerlink{display:none}blockquote.epigraph{border:none}.footer{margin-top:1em}}body{padding-top:0!important}#main-content,#print-main-content{transition:padding .25s ease-out;padding-top:1.5em}@media


key: chroma:document
string_value:
.25s ease-out;padding-top:1.5em}@media (min-width:768px){#main-content{max-width:70%}}footer.footer-article{border-top:none;padding:0}footer.footer-article .prev-next-area{font-size:var(--sbt-prevnext-font-size)}footer.footer-article .prev-next-area a{margin-bottom:1em;padding-left:0;padding-right:0}@media (min-width:768px){footer.footer-article .prev-next-area{max-width:70%}}footer{font-size:var(--sbt-font-size-small-1)}.header-article{height:3em;background-color:#fff;transition:left .2s;font-size:var(--sbt-header-article-font-size)}@media (max-width:768px){.header-article{height:3.75em}}.scrolled .header-article{box-shadow:0 6px 6px -6px rgba(0,0,0,.3)}.header-article .header-article-main{height:3em}@media (max-width:768px){.header-article .header-article-main{height:3.75em}}.header-article .header-article-main .header-article__left,.header-article .header-article-main .header-article__right{display:flex;align-items:center}.header-article .header-article-main


key: chroma:document
string_value:
.header-article__right{display:flex;align-items:center}.header-article .header-article-main .header-article__right{margin-left:auto}.header-item{width:100%;text-align:center}.header-item:empty{display:none}.header-item.announcement{background-color:#616161;color:#fff;padding:.4em 12.5%}@media (max-width:768px){.header-item.announcement{padding:.4em 2%}}#site-navigation{padding-top:0;width:275px;font-size:var(--sbt-sidebar-font-size);top:0!important;background:#fff;border-right:1px solid rgba(0,0,0,.1);transition:margin-left .25s ease 0s,opacity .25s ease 0s,visibility .25s ease 0s;overflow-y:unset;height:100vh}@media (max-width:768px){#site-navigation{height:100%;position:fixed;width:75%;max-width:300px;font-size:1.2em;z-index:1100}}#site-navigation .bd-sidebar__content{overflow-y:auto;flex-grow:1;display:flex;flex-direction:column}#site-navigation .bd-sidebar__content::-webkit-scrollbar{width:.3rem;height:.3rem}#site-navigation


key: chroma:document
string_value:
.bd-sidebar__content::-webkit-scrollbar{width:.3rem;height:.3rem}#site-navigation .bd-sidebar__content::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:.25rem}#site-navigation .bd-sidebar__content::-webkit-scrollbar-thumb:hover{background:#a0a0a0}#site-navigation .bd-sidebar__content:not(:hover)::-webkit-scrollbar-thumb{visibility:hidden}#site-navigation .bd-sidebar__bottom,#site-navigation .bd-sidebar__top{padding:0 1rem 0 1.5rem}#site-navigation .bd-sidebar__bottom{margin-top:auto;margin-bottom:2em}#site-navigation nav ul.nav li a,#site-navigation nav ul.nav ul li a{color:#5a5a5a}#site-navigation nav ul.nav a:hover,#site-navigation nav ul.nav li.active>a,#site-navigation nav ul.nav li.active>a:hover{color:rgba(var(--pst-color-link),1)}#site-navigation nav ul.nav ul{padding-left:1rem}#site-navigation h1.site-logo{margin:.5em 0 0;font-size:1.1em;color:#000;text-align:center}#site-navigation


key: chroma:document
string_value:
h1.site-logo{margin:.5em 0 0;font-size:1.1em;color:#000;text-align:center}#site-navigation div.navbar_extra_footer{text-align:center;font-size:.9em;color:#5a5a5a;margin-bottom:3em}#site-navigation.single-page{border-right:0}@media (min-width:768px){div.navbar-brand-box{padding-top:2em}}div.navbar-brand-box a.navbar-brand{width:100%;height:auto;flex-direction:column}div.navbar-brand-box a.navbar-brand img{display:block;height:auto;width:auto;max-height:10vh;max-width:100%;margin:0 auto}@media (min-width:768px){div.navbar-brand-box a.navbar-brand img{max-height:15vh!important}}nav.bd-links{margin-left:0;overflow-y:visible;max-height:none}nav.bd-links .toctree-l1 a,nav.bd-links p.caption{padding-left:0}.bd-toc{padding:0!important;right:-1em;height:auto;transition:margin-right .25s ease 0s,opacity .25s ease 0s,visibility .25s ease 0s}.bd-toc .toc-entry a,.bd-toc div.onthispage{color:#5a5a5a}@media


key: chroma:document
string_value:
ease 0s,visibility .25s ease 0s}.bd-toc .toc-entry a,.bd-toc div.onthispage{color:#5a5a5a}@media (max-width:768px){.bd-toc{z-index:1100;top:0;right:0;position:fixed;height:100%;width:75%;max-width:300px;background-color:#fff;border-left:1px solid rgba(0,0,0,.1);font-size:1.4em}.bd-toc li{font-size:.8em}}.bd-toc nav{opacity:0;max-height:0;transition:opacity .2s ease,max-height .7s ease;overflow-y:hidden;background:#fff}.bd-toc nav::-webkit-scrollbar{width:.3rem;height:.3rem}.bd-toc nav::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:.25rem}.bd-toc nav::-webkit-scrollbar-thumb:hover{background:#a0a0a0}.bd-toc nav:not(:hover)::-webkit-scrollbar-thumb{visibility:hidden}.bd-toc nav a:hover,.bd-toc nav li.active>a.active{color:rgba(var(--pst-color-link),1)}.bd-toc nav li.active>a.active{border-left:2px solid rgba(var(--pst-color-link),1)}.bd-toc nav>.nav{border-left:1px solid #eee}.bd-toc nav>.nav .nav{border-left:none}.bd-toc.show nav,.bd-toc:hover


key: chroma:document
string_value:
solid #eee}.bd-toc nav>.nav .nav{border-left:none}.bd-toc.show nav,.bd-toc:hover nav{max-height:90vh;opacity:1;overflow-y:auto}.bd-toc.show .tocsection:after,.bd-toc:hover .tocsection:after{opacity:0}@media (max-width:768px){.bd-toc nav{max-height:90vh;opacity:1;overflow-y:auto}.bd-toc .tocsection:after{opacity:0}}.bd-toc .tocsection{padding:.5rem 0 .5rem 1rem!important}.bd-toc .tocsection:after{content:"\f107";font-family:Font Awesome\ 5 Free;font-weight:900;padding-left:.5em;transition:opacity .3s ease}.bd-toc .toc-entry a{padding:.125rem 1rem!important}.bd-toc div.editthispage{display:none}input.sidebar-toggle{display:none;position:absolute}@media (min-width:768px){input#__navigation:checked~.container-xl #site-navigation{visibility:hidden;opacity:0;margin-left:-275px}input#__navigation:checked~.container-xl #main-content{padding-left:4rem;padding-right:4rem}}@media (max-width:768px){input#__navigation:not(:checked)~.container-xl


key: chroma:document
string_value:
(max-width:768px){input#__navigation:not(:checked)~.container-xl #site-navigation{visibility:hidden;opacity:0;margin-left:-75%}}@media (max-width:768px){input#__page-toc:not(:checked)~.container-xl .bd-toc{visibility:hidden;opacity:0;margin-right:-75%}}label.overlay{height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}label.overlay.overlay-navbar{background-color:rgba(0,0,0,.54)}@media (max-width:768px){input:checked+label.overlay{height:100%;opacity:1;width:100%}input:checked+label.overlay.overlay-navbar{z-index:1099}input:checked+label.overlay.overlay-pagetoc{z-index:1019}}.headerbtn{justify-content:center;background-color:#fff;color:#5a5a5a;cursor:pointer;border:none;padding:.1rem .5rem;margin:0 .1rem}.headerbtn,.headerbtn span{display:flex;align-items:center}.headerbtn i,.headerbtn


key: chroma:document
string_value:
.1rem}.headerbtn,.headerbtn span{display:flex;align-items:center}.headerbtn i,.headerbtn img{margin:auto;width:1em;text-align:center;font-size:1.5em}.menu-dropdown__content:hover,.menu-dropdown__trigger:hover+.menu-dropdown__content{visibility:visible;opacity:1}.menu-dropdown__content{position:absolute;visibility:hidden;opacity:0;transform:translateX(-75%);transition:opacity .2s ease-out;width:10rem;border-radius:.4em;box-shadow:0 3px 10px 0 rgba(0,0,0,.25);padding:.5em;background-color:#fff}.menu-dropdown__content .headerbtn{justify-content:left;padding:.1rem 0}.menu-dropdown__content ul{list-style:none;padding-left:0;margin-bottom:0}.menu-dropdown__content span{display:flex}.menu-dropdown__content span.headerbtn__icon-container{width:2em}.menu-dropdown__content span.headerbtn__text-container{flex-grow:1;margin-left:.5em}.menu-dropdown__content i,.menu-dropdown__content img{font-size:1.2em}div.header-article-main .header-article__left a,div.header-article-main .header-article__left


key: chroma:document
string_value:
.header-article__left a,div.header-article-main .header-article__left button,div.header-article-main .header-article__left label,div.header-article-main .header-article__right a,div.header-article-main .header-article__right button,div.header-article-main .header-article__right label{color:#5a5a5a}div.header-article-main .header-article__left a:focus,div.header-article-main .header-article__left a:hover,div.header-article-main .header-article__left button:focus,div.header-article-main .header-article__left button:hover,div.header-article-main .header-article__left label:focus,div.header-article-main .header-article__left label:hover,div.header-article-main .header-article__right a:focus,div.header-article-main .header-article__right a:hover,div.header-article-main .header-article__right button:focus,div.header-article-main .header-article__right button:hover,div.header-article-main .header-article__right label:focus,div.header-article-main .header-article__right


key: chroma:document
string_value:
.header-article__right label:focus,div.header-article-main .header-article__right label:hover{color:#000;box-shadow:none;text-decoration:none}.headerbtn-page-toc{display:block}@media (min-width:768px){.headerbtn-page-toc{display:none}}dt:target,span.highlighted{background-color:rgba(243,119,38,.25882352941176473)}.admonition{border-radius:.4em;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}.admonition.seealso{border-color:#28a745}.admonition.seealso .admonition-title{background-color:rgba(40,167,70,.1)}.admonition.seealso .admonition-title:before{color:#28a745;content:"\f064"}code{font-size:87.5%!important}pre{border-radius:.4em}pre::-webkit-scrollbar{width:.3rem;height:.3rem}pre::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:.25rem}pre::-webkit-scrollbar-thumb:hover{background:#a0a0a0}div[class*=highlight-],pre{clear:none}.highlighttable


key: chroma:document
string_value:
.linenos{vertical-align:baseline}div.highlight{background:none;margin-bottom:1em}.cm-s-default{font-family:var(--jp-code-font-family);font-size:var(--jp-code-font-size);line-height:var(--jp-code-line-height)}.CodeMirror-focused{background-color:var(--jp-cell-editor-active-background)!important;border:var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);margin:-1px}dl.field-list dd,dl.simple dd{margin-left:1.5em}dl.footnote span.fn-backref{font-size:1em;padding-left:.1em}dl.footnote dd{font-size:.9em;margin-left:3em}.footnote-reference,a.bibtex.internal{font-size:1em}dl.glossary dd{margin-left:1.5em}img{max-width:100%}img.align-center{margin-left:auto;margin-right:auto;display:block}img.align-left{clear:left;float:left;margin-right:1em}img.align-right{clear:right;float:right;margin-left:1em}div.figure{width:100%;margin-bottom:1em;text-align:center}div.figure.align-left{text-align:left}div.figure.align-left


key: chroma:document
string_value:
p.caption{margin-left:0}div.figure.align-right{text-align:right}div.figure.align-right p.caption{margin-right:0}div.figure p.caption{margin:.5em 10%}div.figure.margin-caption p.caption,div.figure.margin p.caption{margin:.5em 0}div.figure.margin-caption p.caption{text-align:left}div.figure span.caption-number{font-weight:700}div.figure span{font-size:.9rem}label.margin-toggle{margin-bottom:0}label.margin-toggle.marginnote-label{display:none}label.margin-toggle sup{user-select:none}@media (max-width:768px){label.margin-toggle{cursor:pointer;color:#0071bc}label.margin-toggle.marginnote-label{display:inline}label.margin-toggle.marginnote-label:after{content:"\2295"}}input.margin-toggle{display:none}@media (max-width:768px){input.margin-toggle:checked+.marginnote,input.margin-toggle:checked+.sidenote{display:block;float:left;left:1rem;clear:both;width:95%;margin:1rem


key: chroma:document
string_value:
2.5%;position:relative}}span.marginnote,span.sidenote{width:40%;float:right;background-color:unset;font-size:.9em;border-left:none}span.marginnote sup,span.sidenote sup{user-select:none}@media (min-width:768px){span.marginnote,span.sidenote{border:none;width:39.85714%;margin:0 -42.85714% 0 0;clear:right}span.marginnote p.sidebar-title,span.sidenote p.sidebar-title{margin-bottom:.1em}}@media (max-width:768px){span.marginnote,span.sidenote{display:none}}.cell.tag_margin,.cell.tag_popout,aside.margin,div.margin,figure.margin{width:40%;float:right;background-color:unset;border-left:1px solid #a4a6a7;font-size:.9em}@media (min-width:768px){.cell.tag_margin,.cell.tag_popout,aside.margin,div.margin,figure.margin{border:none;width:39.85714%;margin:0 -42.85714% 0 0;clear:right}.cell.tag_margin p.sidebar-title,.cell.tag_popout p.sidebar-title,aside.margin p.sidebar-title,div.margin p.sidebar-title,figure.margin p.sidebar-title{margin-bottom:.1em}}.cell.tag_margin div.cell.tag_margin


key: chroma:document
string_value:
p.sidebar-title{margin-bottom:.1em}}.cell.tag_margin div.cell.tag_margin .cell_output,.cell.tag_popout div.cell.tag_margin .cell_output,aside.margin div.cell.tag_margin .cell_output,div.margin div.cell.tag_margin .cell_output,figure.margin div.cell.tag_margin .cell_output{padding-left:0}div.figure.margin-caption figcaption,div.figure.margin-caption p.caption,figure.margin-caption figcaption{width:40%;float:right;background-color:unset;border-left:1px solid #a4a6a7;font-size:.9em}@media (min-width:768px){div.figure.margin-caption figcaption,div.figure.margin-caption p.caption,figure.margin-caption figcaption{border:none;width:39.85714%;margin:0 -42.85714% 0 0;clear:right}div.figure.margin-caption figcaption p.sidebar-title,div.figure.margin-caption p.caption p.sidebar-title,figure.margin-caption figcaption p.sidebar-title{margin-bottom:.1em}}@media


key: chroma:document
string_value:
p.sidebar-title,figure.margin-caption figcaption p.sidebar-title{margin-bottom:.1em}}@media (min-width:768px){.full-width,.full_width,div.cell.tag_full-width,div.cell.tag_full_width{max-width:142.85714%;width:142.85714%}}.margin-caption figcaption{text-align:left}div.math{position:relative;display:flex;flex-direction:row-reverse;align-items:center}div.math .headerlink{font-size:1em;padding:0 .2em;margin-left:0}div.math .headerlink:hover{opacity:1}div.math:hover .headerlink{opacity:.5}span.eqno{font-size:1.2em;margin-left:.5em}.MathJax{overflow-x:auto;margin-right:auto!important;margin-left:auto!important;overflow-y:hidden}.MathJax::-webkit-scrollbar{width:.3rem;height:.3rem}.MathJax::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:.25rem}.MathJax::-webkit-scrollbar-thumb:hover{background:#a0a0a0}p~div.math{margin-top:-1.15rem}blockquote{margin:1em;padding:.2em 1.5em;border-left:4px solid


key: chroma:document
string_value:
1.5em;border-left:4px solid #ccc}blockquote.epigraph,blockquote.highlights,blockquote.pull-quote{font-size:1.25em;border-left:none}blockquote div>p{margin-bottom:.5em}blockquote div>p+p.attribution{font-style:normal;font-size:.9em;text-align:right;color:#6c757d;padding-right:2em}aside.sidebar:not(.margin),div.sidebar:not(.margin){background-color:unset;padding:1em;border-radius:.4em;border-color:#aaa}@media (min-width:992px){aside.sidebar:not(.margin),div.sidebar:not(.margin){width:65%;margin:0 -35% 0 3%}}div.tableofcontents-wrapper p.caption{font-weight:600!important;margin-bottom:0!important}div.toctree-wrapper p.caption{font-size:1.4em}div.toctree-wrapper>ul{padding-left:1.5em}div.toctree-wrapper>ul>li>a{font-size:1.1em}div.contents{border-radius:.4em;padding:1em 1em 2em}div.contents p.topic-title{font-size:1.5em;padding:0 0 0


key: chroma:document
string_value:
1em 2em}div.contents p.topic-title{font-size:1.5em;padding:0 0 0 .5em;margin-bottom:0}div.contents>ul{list-style:none;padding-left:1em}div.contents>ul>li>ul{padding-left:1.5em}div.contents>ul>li>p>a{font-size:1.2em;margin-bottom:.5em}@media print{#jb-print-toc{margin-bottom:1.5rem}#jb-print-toc .section-nav{border-left:0;list-style-type:disc;margin-left:3em}#jb-print-toc .section-nav a{text-decoration:none;padding-left:0}#jb-print-toc .section-nav li{display:list-item!important}#jb-print-toc .section-nav .nav{display:none}}ul.ablog-archive,ul.postlist{padding-left:0}ul.postlist>li>p:first-child{font-size:1.5em}ul.postlist li+li{margin-top:2em}ul.postlist li>p>a{font-style:normal;font-size:1.3em}div.bd-sidebar h2{font-size:1.5em}div.bd-sidebar h3{font-size:1.4em}div.bd-sidebar>ul{list-style:none;padding-left:0}@media only print{div.utterances,hypothesis-sidebar{display:none}}div.cell div.highlight{margin-bottom:0}div.cell div.cell_input,div.cell div.cell_output


key: chroma:document
string_value:
div.highlight{margin-bottom:0}div.cell div.cell_input,div.cell div.cell_output pre{border-radius:.4em;border:1px solid #ccc}div.cell div.cell_output{padding-right:0}div.cell.tag_output_scroll div.cell_output,div.cell.tag_scroll-output div.cell_output{max-height:24em;overflow-y:auto}div.cell.tag_output_scroll div.cell_output::-webkit-scrollbar,div.cell.tag_scroll-output div.cell_output::-webkit-scrollbar{width:.3rem;height:.3rem}div.cell.tag_output_scroll div.cell_output::-webkit-scrollbar-thumb,div.cell.tag_scroll-output div.cell_output::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:.25rem}div.cell.tag_output_scroll div.cell_output::-webkit-scrollbar-thumb:hover,div.cell.tag_scroll-output div.cell_output::-webkit-scrollbar-thumb:hover{background:#a0a0a0}@media print{div.cell.tag_output_scroll div.cell_output,div.cell.tag_scroll-output div.cell_output{max-height:unset;overflow-y:visible}}div.cell.tag_scroll-input


key: chroma:document
string_value:
div.cell_output{max-height:unset;overflow-y:visible}}div.cell.tag_scroll-input div.cell_input{max-height:24em;overflow-y:auto}div.cell.tag_scroll-input div.cell_input::-webkit-scrollbar{width:.3rem;height:.3rem}div.cell.tag_scroll-input div.cell_input::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:.25rem}div.cell.tag_scroll-input div.cell_input::-webkit-scrollbar-thumb:hover{background:#a0a0a0}@media print{div.cell.tag_scroll-input div.cell_input{max-height:unset;overflow-y:visible}}div.sphinx-tabs>div.sphinx-menu{padding:0}div.sphinx-tabs>div.sphinx-menu>a.item{width:auto;margin:0 0 -1px}.bd-sidebar div#rtd-footer-container{position:sticky;bottom:0}.bd-sidebar .rst-versions.rst-badge{position:unset;font-size:.9em}.bd-sidebar .rst-versions.rst-badge .rst-current-version{display:flex;align-items:center;gap:.2rem;height:2.5rem;transition:background-color .2s ease-out;background-color:#fff;color:#5a5a5a;border-top:1px solid rgba(0,0,0,.1)}@media (max-width:768px){.bd-sidebar


key: chroma:document
string_value:
solid rgba(0,0,0,.1)}@media (max-width:768px){.bd-sidebar .rst-versions.rst-badge .rst-current-version{height:3rem}}.bd-sidebar .rst-versions.rst-badge .rst-current-version:hover{background-color:rgba(var(--pst-color-sidebar-expander-background-hover),1);cursor:pointer}.bd-sidebar .rst-versions.rst-badge .rst-current-version .fa{color:#5a5a5a}.bd-sidebar .rst-versions.rst-badge .rst-current-version .fa-book{float:unset;margin-right:auto}.bd-sidebar .rst-versions.rst-badge .rst-current-version .fa-book:after{content:"Read the Docs";font-family:sans-serif;font-weight:700;margin-left:.2em}.bd-sidebar .rst-versions.rst-badge .rst-other-versions dt{color:#ccc}.thebelab-cell{border:none!important;margin-right:.5em!important}.thebelab-cell


key: chroma:document
string_value:
dt{color:#ccc}.thebelab-cell{border:none!important;margin-right:.5em!important}.thebelab-cell .thebelab-input{padding-left:10px!important}.cell.docutils.container{padding-right:0!important}button.thebe-launch-button{height:2.5em;font-size:1em}#search-documentation,#search-documentation~form,#search-documentation~p{display:none}div#search-results>h2{margin-top:0}ul.search{margin:0;list-style:none}ul.search li{background-image:none;margin-bottom:1em;padding:0 0 1em;border-bottom:1px solid rgba(0,0,0,.1)}ul.search li>a{font-size:1.2em}ul.search li div.context,ul.search li p.context{margin:.5em 0 0}ul.search li div.context a:before,ul.search li p.context a:before{content:"#";padding-right:.2em;color:#aaa}


key: chroma:document
string_value:
Ray Train API — Ray 3.0.0.dev0





































































Toggle navigation sidebar




Toggle in-page Table of Contents












Ray 3.0.0.dev0









                    Welcome to Ray!
                




  Ray
 




   Overview
  



   Getting Started
  



   Installation
  



   Use Cases
  



   Example Gallery
  



   Ecosystem
  



   Ray Core
  



   Ray Data
  



   Ray Train
  








     Overview
    



     PyTorch Guide
    



     PyTorch Lightning Guide
    



     Hugging Face Transformers Guide
    



     More Frameworks
    



     User Guides
    



     Examples
    



     Benchmarks
    



     Ray Train API
    








       ray.train.torch.TorchTrainer
      



       ray.train.torch.TorchConfig
      



       ray.train.torch.get_device
      



       ray.train.torch.prepare_model
      



       ray.train.torch.prepare_data_loader


key: chroma:document
string_value:
ray.train.torch.prepare_model
      



       ray.train.torch.prepare_data_loader
      



       ray.train.torch.enable_reproducibility
      



       ray.train.lightning.prepare_trainer
      



       ray.train.lightning.RayLightningEnvironment
      



       ray.train.lightning.RayDDPStrategy
      



       ray.train.lightning.RayFSDPStrategy
      



       ray.train.lightning.RayDeepSpeedStrategy
      



       ray.train.lightning.RayTrainReportCallback
      



       ray.train.huggingface.transformers.prepare_trainer
      



       ray.train.huggingface.transformers.RayTrainReportCallback
      



       ray.train.tensorflow.TensorflowTrainer
      



       ray.train.tensorflow.TensorflowConfig
      



       ray.train.tensorflow.prepare_dataset_shard
      



       ray.train.tensorflow.keras.ReportCheckpointCallback
      



       ray.train.horovod.HorovodTrainer
      



       ray.train.horovod.HorovodConfig


key: chroma:document
string_value:
ray.train.horovod.HorovodTrainer
      



       ray.train.horovod.HorovodConfig
      



       ray.train.xgboost.XGBoostTrainer
      



       ray.train.lightgbm.LightGBMTrainer
      



       ray.train.CheckpointConfig
      



       ray.train.DataConfig
      



       ray.train.FailureConfig
      



       ray.train.RunConfig
      



       ray.train.ScalingConfig
      



       ray.train.SyncConfig
      



       ray.train.Checkpoint
      



       ray.train.context.TrainContext
      



       ray.train.get_checkpoint
      



       ray.train.get_context
      



       ray.train.get_dataset_shard
      



       ray.train.report
      



       ray.train.Result
      



       ray.train.trainer.BaseTrainer
      



       ray.train.data_parallel_trainer.DataParallelTrainer
      



       ray.train.gbdt_trainer.GBDTTrainer
      



       ray.train.backend.Backend
      



       ray.train.backend.BackendConfig
      







   Ray Tune


key: chroma:document
string_value:
ray.train.backend.BackendConfig
      







   Ray Tune
  



   Ray Serve
  



   Ray RLlib
  



   More Libraries
  



   Ray Clusters
  



   Monitoring and Debugging
  



   Developer Guides
  



   Glossary
  



   Security
  







            Theme by the Executable Book Project



































repository







open issue







suggest edit
















.rst







.pdf















 Contents
    




   PyTorch Ecosystem
  



     PyTorch
    



     PyTorch Lightning
    



     Hugging Face Transformers
    





   More Frameworks
  



     Tensorflow/Keras
    



     Horovod
    



     XGBoost
    



     LightGBM
    





   Ray Train Configuration
  



   Ray Train Utilities
  





   Ray Train Output
  



   Ray Train Developer APIs
  



     Trainer Base Classes
    



     Train Backend Base Classes
    











Ray Train API




 Contents 





   PyTorch Ecosystem
  



     PyTorch


key: chroma:document
string_value:
Ray Train API




 Contents 





   PyTorch Ecosystem
  



     PyTorch
    



     PyTorch Lightning
    



     Hugging Face Transformers
    





   More Frameworks
  



     Tensorflow/Keras
    



     Horovod
    



     XGBoost
    



     LightGBM
    





   Ray Train Configuration
  



   Ray Train Utilities
  





   Ray Train Output
  



   Ray Train Developer APIs
  



     Trainer Base Classes
    



     Train Backend Base Classes
    











Ray Train API#

PyTorch Ecosystem#






TorchTrainer
A Trainer for data parallel PyTorch training.

TorchConfig
Configuration for torch process group setup.




PyTorch#






get_device
Gets the correct torch device configured for this process.

prepare_model
Prepares the model for distributed execution.

prepare_data_loader
Prepares DataLoader for distributed execution.

enable_reproducibility
Limits sources of nondeterministic behavior.





PyTorch Lightning#


key: chroma:document
string_value:
enable_reproducibility
Limits sources of nondeterministic behavior.





PyTorch Lightning#






prepare_trainer
Prepare the PyTorch Lightning Trainer for distributed execution.

RayLightningEnvironment
Setup Lightning DDP training environment for Ray cluster.

RayDDPStrategy
Subclass of DDPStrategy to ensure compatibility with Ray orchestration.

RayFSDPStrategy
Subclass of FSDPStrategy to ensure compatibility with Ray orchestration.

RayDeepSpeedStrategy
Subclass of DeepSpeedStrategy to ensure compatibility with Ray orchestration.

RayTrainReportCallback
A simple callback that reports checkpoints to Ray on train epoch end.





Hugging Face Transformers#






prepare_trainer
Prepare your HuggingFace Transformer Trainer for Ray Train.

RayTrainReportCallback
A simple callback to report checkpoints and metrics to Ray Tarin.






More Frameworks#

Tensorflow/Keras#






TensorflowTrainer
A Trainer for data parallel Tensorflow training.


key: chroma:document
string_value:
Tensorflow/Keras#






TensorflowTrainer
A Trainer for data parallel Tensorflow training.

TensorflowConfig
PublicAPI (beta): This API is in beta and may change before becoming stable.

prepare_dataset_shard
A utility function that overrides default config for Tensorflow Dataset.

ReportCheckpointCallback
Keras callback for Ray Train reporting and checkpointing.





Horovod#






HorovodTrainer
A Trainer for data parallel Horovod training.

HorovodConfig
Configurations for Horovod setup.





XGBoost#






XGBoostTrainer
A Trainer for data parallel XGBoost training.





LightGBM#






LightGBMTrainer
A Trainer for data parallel LightGBM training.






Ray Train Configuration#






CheckpointConfig
Configurable parameters for defining the checkpointing strategy.

DataConfig
Class responsible for configuring Train dataset preprocessing.

FailureConfig
Configuration related to failure handling of each training/tuning run.


key: chroma:document
string_value:
FailureConfig
Configuration related to failure handling of each training/tuning run.

RunConfig
Runtime configuration for training and tuning runs.

ScalingConfig
Configuration for scaling training.

SyncConfig
Configuration object for Train/Tune file syncing to RunConfig(storage_path).





Ray Train Utilities#
Classes






Checkpoint
A reference to data persisted as a directory in local or remote storage.

TrainContext
Context for Ray training executions.



Functions






get_checkpoint
Access the session's last checkpoint to resume from if applicable.

get_context
Get or create a singleton training context.

get_dataset_shard
Returns the ray.data.DataIterator shard for this worker.

report
Report metrics and optionally save a checkpoint.





Ray Train Output#






Result
The final result of a ML training run or a Tune trial.





Ray Train Developer APIs#

Trainer Base Classes#






BaseTrainer
Defines interface for distributed training on Ray.


key: chroma:document
string_value:
Trainer Base Classes#






BaseTrainer
Defines interface for distributed training on Ray.

DataParallelTrainer
A Trainer for data parallel training.

GBDTTrainer
Abstract class for scaling gradient-boosting decision tree (GBDT) frameworks.





Train Backend Base Classes#






Backend
Singleton for distributed communication backend.

BackendConfig
Parent class for configurations of training backend.














previous
Ray Train Benchmarks




next
ray.train.torch.TorchTrainer











Thanks for the feedback!


Was this helpful?




Yes





No



Feedback

Submit


  
    By The Ray Team
  
      © Copyright 2023, The Ray Team.


key: chroma:document
string_value:
Ray Examples — Ray 3.0.0.dev0





































































Toggle navigation sidebar




Toggle in-page Table of Contents












Ray 3.0.0.dev0









                    Welcome to Ray!
                




  Ray
 




   Overview
  



   Getting Started
  



   Installation
  



   Use Cases
  



   Example Gallery
  



   Ecosystem
  



   Ray Core
  



   Ray Data
  



   Ray Train
  



   Ray Tune
  



   Ray Serve
  



   Ray RLlib
  



   More Libraries
  



   Ray Clusters
  



   Monitoring and Debugging
  



   Developer Guides
  



   Glossary
  



   Security
  







            Theme by the Executable Book Project



































repository







open issue







suggest edit
















.rst







.pdf















Ray Examples









Ray Examples#







                         
Sorry! We could not find an example matching that filter.


key: chroma:document
string_value:
Sorry! We could not find an example matching that filter.

                Help us improve our examples by suggesting one. Tell us what example you would like to
                have.
              









Blog
How Ray solves common production challenges for generative AI infrastructure







Blog
Training 175B Parameter Language Models at 1000 GPU scale with Alpa and Ray







Blog
Faster stable diffusion fine-tuning with Ray Train







Blog
How to fine tune and serve LLMs simply, quickly and cost effectively using Ray + DeepSpeed + HuggingFace







Blog
How OpenAI Uses Ray to Train Tools like ChatGPT







Code example
GPT-J-6B Fine-Tuning with Ray Train and DeepSpeed







Code example
Aviary toolkit serving live traffic for LLMs







Tutorial
Get started with Ray Train from an existing PyTorch codebase







Code example
Distributed training with LightGBM







Tutorial
Distributed training with XGBoost


key: chroma:document
string_value:
Tutorial
Distributed training with XGBoost







Code example
How to use Ray Data to do batch prediction with the Hugging Face Transformers GPT-J model







Code example
How to use Ray Serve to do online serving with the Hugging Face Transformers GPT-J model







Code example
How to fine-tune a DreamBooth text-to-image model with your own images.







Code example
Fine-tune dolly-v2-7b with Ray Train, PyTorch Lightning and FSDP







Code example
Torch Object Detection Example with Ray Train







Code example
Image Classification Batch Inference with PyTorch ResNet152







Code example
How to use Ray Data to do batch prediction with the Stable Diffusion text-to-image model







Code example
Object Detection Batch Inference with PyTorch FasterRCNN_ResNet50







Code example
Image Classification Batch Inference with PyTorch ResNet18







Code example
Image Classification Batch Inference with Huggingface Vision Transformer


key: chroma:document
string_value:
Code example
Image Classification Batch Inference with Huggingface Vision Transformer







Code example
Serving ML models with Ray Serve (Tensorflow, PyTorch, Scikit-Learn, others)







Code example
Batching tutorial for Ray Serve







Code example
Serving RLlib Models with Ray Serve







Code example
Scaling your Gradio app with Ray Serve







Code example
Java tutorial for Ray Serve







Code example
Serving a Stable Diffusion Model







Code example
Serving a Distilbert Model







Code example
Serving a Bert Model on AWS NeuronCore







Code example
Serving an Object Detection Model







Blog
Offline Batch Inference: Comparing Ray, Apache Spark, and SageMaker







Blog
Streaming distributed execution across CPUs and GPUs







Blog
Using Ray Data to parallelize LangChain inference







Blog
Batch Prediction using Ray Data







Blog
Training One Million ML Models in Record Time with Ray







Blog
Many Models Batch Training at Scale with Ray Core


key: chroma:document
string_value:
Blog
Many Models Batch Training at Scale with Ray Core







Code example
Batch Training with Ray Core







Code example
Batch Training with Ray Data







Tutorial
Tune Basic Parallel Experiments







Code example
Batch Training and Tuning using Ray Tune







Video
Scaling Instacart fulfillment ML on Ray







Code example
Using Aim with Ray Tune For Experiment Management







Code example
Using Comet with Ray Tune For Experiment Management







Code example
Tracking Your Experiment Process Weights & Biases







Code example
Using MLflow Tracking & AutoLogging with Tune







Code example
How To Use Tune With Ax







Code example
How To Use Tune With Dragonfly







Code example
How To Use Tune With HyperOpt







Code example
How To Use Tune With BayesOpt







Code example
How To Use Tune With BlendSearch and CFO







Code example
How To Use Tune With TuneBOHB







Code example
How To Use Tune With Nevergrad


key: chroma:document
string_value:
Code example
How To Use Tune With Nevergrad







Code example
How To Use Tune With Optuna







Code example
How To Use Tune With SigOpt







Video
Productionizing ML at Scale with Ray Serve







Blog
Simplify your MLOps with Ray & Ray Serve







Tutorial
Getting Started with Ray Serve







Tutorial
Model Composition in Serve







Tutorial
Getting Started with Ray Tune







Blog
How to distribute hyperparameter tuning with Ray Tune







Video
Simple Distributed Hyperparameter Optimization







Blog
Hyperparameter Search with 🤗 Transformers







Code example
How To Use Tune With Keras & TF Models







Code example
How To Use Tune With PyTorch Models







Code example
How To Tune PyTorch Lightning Models







Code example
Model Selection & Serving With Ray Serve







Code example
Tuning RL Experiments With Ray Tune & Ray Serve







Code example
A Guide To Tuning XGBoost Parameters With Tune


key: chroma:document
string_value:
Code example
A Guide To Tuning XGBoost Parameters With Tune







Code example
A Guide To Tuning LightGBM Parameters With Tune







Code example
A Guide To Tuning Horovod Parameters With Tune







Code example
A Guide To Tuning Huggingface Transformers With Tune







Code example
More Tune use cases on the Blog







Video
Ray Train, PyTorch, TorchX, and distributed deep learning







Tutorial
Getting Started with Ray Train







Code example
Fine-tune a 🤗 Transformers model on GLUE benchmark







Code example
PyTorch Fashion MNIST Training Example







Code example
TensorFlow MNIST Training Example







Code example
End-to-end Horovod Training Example







Code example
End-to-end PyTorch Lightning Training Example







Code example
Fine-tune a PyTorch Lightning Text Classifier with Ray Data







Code example
End-to-end Example for Tuning a TensorFlow Model







Code example
End-to-end Example for Tuning a PyTorch Model with PBT


key: chroma:document
string_value:
Code example
End-to-end Example for Tuning a PyTorch Model with PBT







Course
Applied Reinforcement Learning with RLlib







Blog
Intro to RLlib: Example Environments







Code example
A collection of tuned hyperparameters by RLlib algorithm







Code example

A collection of reasonably optimized Atari and MuJoCo results for RLlib








Code example
RLlib’s trajectory view API and how it enables implementations of GTrXL (attention net) architectures







Code example
A how-to on connecting RLlib with the Unity3D game engine for running visual- and physics-based RL experiments







Code example

How we ported 12 of RLlib’s algorithms from TensorFlow to PyTorch and what we learnt on the way








Code example
This blog post is a brief tutorial on multi-agent RL and its design in RLlib







Code example
Exploration of a functional paradigm for implementing reinforcement learning (RL) algorithms


key: chroma:document
string_value:
Code example
Example of defining and registering a gym env and model for use with RLlib







Code example
Example of how to setup an RLlib algorithm against a locally running Unity3D editor







Code example
Rendering and recording of an environment







Code example
Coin game example with RLlib







Code example
Example for how to use a DMLab environment (Watermaze)







Code example
RecSym environment example (for recommender systems) using the SlateQ algorithm







Code example
Example demonstrating how to use the SUMO simulator in connection with RLlib.







Code example
VizDoom example script using RLlib’s auto-attention wrapper







Code example
Example of how to ensure subprocesses spawned by envs are killed when RLlib exits.







Code example
Attention Net (GTrXL) learning the “repeat-after-me” environment







Code example
Example showing how to use the auto-LSTM wrapper for your default- and custom models in RLlib.


key: chroma:document
string_value:
Code example
Example of using a custom Keras- or PyTorch RNN model.







Code example
Example of defining and registering a custom model with a supervised loss.







Code example
Example of adding batch norm layers to a custom model.







Code example
Example of how to leverage TensorFlow eager to simplify debugging and design of custom models and policies.







Code example
Example of a “fast” Model learning only one parameter for tf and torch.







Code example
Shows how to define a custom Model API in RLlib, such that it can be used inside certain algorithms.







Code example
An example on how a model can use the trajectory view API to specify its own input.







Code example
Implementations of MobileNetV2 and torch.hub (mobilenet_v2)-wrapping example models.







Code example
Example of DeepMind’s Differentiable Neural Computer for partially-observable environments.


key: chroma:document
string_value:
Code example
Example of how to use Tune’s support for custom training functions to implement custom training workflows.







Code example
Example of how to advance the environment through different phases (tasks) over time.







Code example
How to setup a custom Logger object in RLlib.







Code example
Example of how to output custom training metrics to TensorBoard.







Code example
How to setup a custom TFPolicy.







Code example
How to setup a custom TorchPolicy.







Code example
Example of how to use RLlib’s lower-level building blocks to implement a fully customized training workflow.







Code example
Example of how to use the exec. plan of an Algorithm to trin two different policies in parallel (also using multi-agent API).







Code example
How to run a custom Ray Tune experiment with RLlib with custom training- and evaluation phases.


key: chroma:document
string_value:
Code example
Example of how to write a custom evaluation function that is called instead of the default behavior, which is running with the evaluation worker set through n episodes.







Code example
Example showing how the evaluation workers and the “normal” rollout workers can run (to some extend) in parallel to speed up training.







Code example
Example showing how to run an offline RL training job using a historic-data json file.







Code example
Example of using Ray Serve to serve RLlib models with HTTP and JSON interface







Code example
This script offers a simple workflow for 1) training a policy with RLlib first, 2) creating a new policy 3) restoring its weights from the trained one and serving the new policy via Ray Serve.







Code example
Example of how to setup n distributed Unity3D (compiled) games in the cloud that function as data collecting clients against a central RLlib Policy server learning how to play the game.


key: chroma:document
string_value:
Code example
Example of online serving of predictions for a simple CartPole policy.







Code example
Example of how to externally generate experience batches in RLlib-compatible format.







Code example
Example of how to find a checkpoint after a Tuner.fit() via some custom defined criteria.







Code example
Setup RLlib to run any algorithm in (independent) multi-agent mode against a multi-agent environment.







Code example
Setup RLlib to run any algorithm in (shared-parameter) multi-agent mode against a multi-agent environment.







Code example
Example of different heuristic and learned policies competing against each other in rock-paper-scissors.







Code example
Example of the two-step game from the QMIX paper.







Code example
Example on how to use RLlib to learn in PettingZoo multi-agent environments.







Code example
Example of customizing PPO to leverage a centralized value function.


key: chroma:document
string_value:
Code example
Example of customizing PPO to leverage a centralized value function.







Code example
A simpler method of implementing a centralized critic by augmentating agent observations with global information.







Code example
Example of running a custom hand-coded policy alongside trainable policies.







Code example
Example of how to define weight-sharing layers between two different policies.







Code example
Example of alternating training between DQN and PPO.







Code example
Example of hierarchical training using the multi-agent API.







Code example
Example of an iterated prisoner’s dilemma environment solved by RLlib.







Code example
Example of how to setup fractional GPUs for learning (driver) and environment rollouts (remote workers).







Code example
Learning in arbitrarily nested action spaces.







Code example
Example of how to handle variable-length or parametric action spaces


key: chroma:document
string_value:
Code example
Example of how to handle variable-length or parametric action spaces







Code example
How to filter raw observations coming from the environment for further processing by the Agent’s model(s).







Code example
How to use RLlib’s Repeated space to handle variable length observations.







Code example
Learning with auto-regressive action dependencies (e.g. 2 action components; distribution for 2nd component depends on the 1st component’s actually sampled value).







Code example
A General Evaluation Platform and Building Toolkit for Single/Multi-Agent Intelligence with RLlib-generated baselines.







Code example
Example of training autonomous vehicles with RLlib and CARLA simulator.







Code example
Using Graph Neural Networks and RLlib to train multiple cooperative and adversarial agents to solve the “cover the area”-problem, thereby learning how to best communicate (or - in the adversarial case - how to disturb communication).


key: chroma:document
string_value:
Code example
A dense traffic simulating environment with RLlib-generated baselines.







Code example
Example of setting up a multi-agent version of GFootball with RLlib.







Code example
A multiagent AI research environment inspired by Massively Multiplayer Online (MMO) role playing games







Code example
Example of building packet classification trees using RLlib / multi-agent in a bandit-like setting.







Code example
Example of learning optimal LLVM vectorization compiler pragmas for loops in C and C++ codes using RLlib.







Code example
Example of using the multi-agent API to model several social dilemma games.







Code example
Create a custom environment and train a single agent RL using Ray 2.0 with Tune.







Code example
Example of training in StarCraft2 maps with RLlib / multi-agent.







Code example
Example of optimizing mixed-autonomy traffic simulations with RLlib / multi-agent.







Code example
Working with custom Keras models in RLlib


key: chroma:document
string_value:
Code example
Working with custom Keras models in RLlib







Tutorial
Getting Started with RLlib







Video
Deep reinforcement learning at Riot Games







Blog
The Magic of Merlin - Shopify’s New ML Platform







Tutorial
Large Scale Deep Learning Training and Tuning with Ray







Blog
Griffin: How Instacart’s ML Platform Tripled in a year







Video
Predibase - A low-code deep learning platform built for scale







Blog
Building a ML Platform with Kubeflow and Ray on GKE







Video
Ray Summit Panel - ML Platform on Ray







Code example
AutoML for Time Series with Ray







Blog
Highly Available and Scalable Online Applications on Ray at Ant Group







Blog
Ray Forward 2022 Conference: Hyper-scale Ray Application Use Cases







Blog
A new world record on the CloudSort benchmark using Ray







Code example
Speed up your web crawler by parallelizing it with Ray







Tutorial
Image Classification Batch Inference with Huggingface Vision Transformer


key: chroma:document
string_value:
Tutorial
Image Classification Batch Inference with Huggingface Vision Transformer







Tutorial
Image Classification Batch Inference with PyTorch ResNet152







Tutorial
Object Detection Batch Inference with PyTorch FasterRCNN_ResNet50







Tutorial
Many Model Training with Ray Data







Code example
Build Batch Prediction Using Ray







Code example
Build a Simple Parameter Server Using Ray







Code example
Simple Parallel Model Selection







Code example
Fault-Tolerant Fairseq Training







Code example
Learning to Play Pong







Code example
A Gentle Introduction to Ray Core by Example







Code example
Using Ray for Highly Parallelizable Tasks







Code example
Running a Simple MapReduce Example with Ray Core







Code example
Benchmark example for the PyTorch data transfer auto pipeline







Tutorial
How To Use Tune’s Scikit-Learn Adapters?







Code example
Simple example for doing a basic random and grid search.


key: chroma:document
string_value:
Code example
Simple example for doing a basic random and grid search.







Code example
Example of using a simple tuning function with AsyncHyperBandScheduler.







Code example
Example of using a Trainable function with HyperBandScheduler. Also uses the AsyncHyperBandScheduler.







Tutorial
Configuring and running (synchronous) PBT and understanding the underlying algorithm behavior with a simple example.







Tutorial
Example of using the function API with a PopulationBasedTraining scheduler.







Code example
Example of using the Population-based Bandits (PB2) scheduler.







Code example
Example of custom loggers and custom trial directory naming.







Code example
Basics of using Tune







Code example
Using Search algorithms and Trial Schedulers to optimize your model.







Code example
Using Population-Based Training (PBT).







Code example
Fine-tuning Huggingface Transformers with PBT.







Code example
Logging Tune Runs to Comet ML.


key: chroma:document
string_value:
Code example
Logging Tune Runs to Comet ML.







Tutorial
Using Ray Serve to deploy a chatbot







Code example
Fine-tune vicuna-13b-v1.3 with DeepSpeed, PyTorch Lightning and Ray Train







Code example
Distributed Training with DeepSpeed ZeRO-3 and TorchTrainer







Code example
Distributed Training with Hugging Face Accelelate and TorchTrainer







Code example
RayJob Batch Inference Example on Kubernetes with Ray







Blog
Elastic Distributed Training with XGBoost on Ray














previous
Ray for ML Infrastructure




next
The Ray Ecosystem











Thanks for the feedback!


Was this helpful?




Yes





No



Feedback

Submit


  
    By The Ray Team
  
      © Copyright 2023, The Ray Team.


key: chroma:document
string_value:
What is Ray Core? — Ray 3.0.0.dev0





































































Toggle navigation sidebar




Toggle in-page Table of Contents












Ray 3.0.0.dev0









                    Welcome to Ray!
                




  Ray
 




   Overview
  



   Getting Started
  



   Installation
  



   Use Cases
  



   Example Gallery
  



   Ecosystem
  



   Ray Core
  








     Key Concepts
    



     User Guides
    



     Examples
    



     Ray Core API
    





   Ray Data
  



   Ray Train
  



   Ray Tune
  



   Ray Serve
  



   Ray RLlib
  



   More Libraries
  



   Ray Clusters
  



   Monitoring and Debugging
  



   Developer Guides
  



   Glossary
  



   Security
  







            Theme by the Executable Book Project



































repository







open issue







suggest edit
















.rst







.pdf















 Contents
    




   Getting Started


key: chroma:document
string_value:
.rst







.pdf















 Contents
    




   Getting Started
  



   Running a Task
  



   Calling an Actor
  



   Passing an Object
  



   Next Steps
  









What is Ray Core?




 Contents 





   Getting Started
  



   Running a Task
  



   Calling an Actor
  



   Passing an Object
  



   Next Steps
  









What is Ray Core?#
Ray Core provides a small number of core primitives (i.e., tasks, actors, objects) for building and scaling distributed applications. Below we’ll walk through simple examples that show you how to turn your functions and classes easily into Ray tasks and actors, and how to work with Ray objects.

Getting Started#
To get started, install Ray via pip install -U ray. See Installing Ray for more installation options. The following few sections will walk through the basics of using Ray Core.
The first step is to import and initialize Ray:
import ray

ray.init()


key: chroma:document
string_value:
ray.init()



Note
In recent versions of Ray (>=1.5), ray.init() is automatically called on the first use of a Ray remote API.



Running a Task#
Ray lets you run functions as remote tasks in the cluster. To do this, you decorate your function with @ray.remote to declare that you want to run this function remotely.
Then, you call that function with .remote() instead of calling it normally.
This remote call returns a future, a so-called Ray object reference, that you can then fetch with ray.get:
# Define the square task.
@ray.remote
def square(x):
    return x * x

# Launch four parallel square tasks.
futures = [square.remote(i) for i in range(4)]

# Retrieve results.
print(ray.get(futures))
# -> [0, 1, 4, 9]


key: chroma:document
string_value:
# Retrieve results.
print(ray.get(futures))
# -> [0, 1, 4, 9]




Calling an Actor#
Ray provides actors to allow you to parallelize computation across multiple actor instances. When you instantiate a class that is a Ray actor, Ray will start a remote instance of that class in the cluster. This actor can then execute remote method calls and maintain its own internal state:
# Define the Counter actor.
@ray.remote
class Counter:
    def __init__(self):
        self.i = 0

    def get(self):
        return self.i

    def incr(self, value):
        self.i += value

# Create a Counter actor.
c = Counter.remote()

# Submit calls to the actor. These calls run asynchronously but in
# submission order on the remote actor process.
for _ in range(10):
    c.incr.remote(1)

# Retrieve final actor state.
print(ray.get(c.get.remote()))
# -> 10


key: chroma:document
string_value:
# Retrieve final actor state.
print(ray.get(c.get.remote()))
# -> 10


The above covers very basic actor usage. For a more in-depth example, including using both tasks and actors together, check out Monte Carlo Estimation of π.


Passing an Object#
As seen above, Ray stores task and actor call results in its distributed object store, returning object references that can be later retrieved. Object references can also be created explicitly via ray.put, and object references can be passed to tasks as substitutes for argument values:
import numpy as np

# Define a task that sums the values in a matrix.
@ray.remote
def sum_matrix(matrix):
    return np.sum(matrix)

# Call the task with a literal argument value.
print(ray.get(sum_matrix.remote(np.ones((100, 100)))))
# -> 10000.0

# Put a large array into the object store.
matrix_ref = ray.put(np.ones((1000, 1000)))

# Call the task with the object reference as an argument.
print(ray.get(sum_matrix.remote(matrix_ref)))
# -> 1000000.0


key: chroma:document
string_value:
Next Steps#

Tip
To check how your application is doing, you can use the Ray dashboard.

Ray’s key primitives are simple, but can be composed together to express almost any kind of distributed computation.
Learn more about Ray’s key concepts with the following user guides:






Using remote functions (Tasks)







Using remote classes (Actors)







Working with Ray Objects

















previous
The Ray Ecosystem




next
Key Concepts











Thanks for the feedback!


Was this helpful?




Yes





No



Feedback

Submit


  
    By The Ray Team
  
      © Copyright 2023, The Ray Team.


key: chroma:document
string_value:
Ray Glossary — Ray 3.0.0.dev0





































































Toggle navigation sidebar




Toggle in-page Table of Contents












Ray 3.0.0.dev0









                    Welcome to Ray!
                




  Ray
 




   Overview
  



   Getting Started
  



   Installation
  



   Use Cases
  



   Example Gallery
  



   Ecosystem
  



   Ray Core
  



   Ray Data
  



   Ray Train
  



   Ray Tune
  



   Ray Serve
  



   Ray RLlib
  



   More Libraries
  



   Ray Clusters
  



   Monitoring and Debugging
  



   Developer Guides
  



   Glossary
  



   Security
  







            Theme by the Executable Book Project



































repository







open issue







suggest edit
















.rst







.pdf















Ray Glossary









Ray Glossary#
On this page you find a list of important terminology used throughout the Ray
documentation, sorted alphabetically.


key: chroma:document
string_value:
Action space#Property of an RL environment. The shape(s) and datatype(s) that actions within
an RL environment are allowed to have.
Examples: An RL environment, in which an agent can move up, down, left,
or right might have an action space of Discrete(4) (integer values
of 0, 1, 2, or 3).
An RL environment, in which an agent can apply a torque between
-1.0 and 1.0 to a joint, the action space might be
Box(-1.0, 1.0, (1,), float32) (single float values between -1.0 and 1.0).

Actor#A Ray actor is a remote instance of a class, which is
essentially a stateful service. Learn more about Ray actors.

Actor task#An invocation of an Ray actor method. Sometimes we just call it a task.

Ray Agent#Daemon process running on each Ray node. It has several functionalities like
collecting metrics on the local node and installing runtime environments.


key: chroma:document
string_value:
Agent#An acting entity inside an RL environment. One RL environment might contain
one (single-agent RL) or more (multi-agent RL) acting agents. Different agents
within the same environment might have different observation- and action-spaces,
different reward functions, and act at different time-steps.

Algorithm#A class that holds the who/when/where/how for training one or more RL agent(s).
The user interacts with an Algorithm instance directly to train their agents
(it is the top-most user facing API or RLlib).

Asynchronous execution#An execution model where a later task can begin executing in parallel,
without waiting for an earlier task to finish.
Ray tasks and actor tasks are all executed asynchronously.


key: chroma:document
string_value:
Asynchronous sampling#Sampling is the process of rolling out (playing) episodes within an RL
environment and thereby collecting the training data (observations, actions
and rewards). In an asynchronous sampling setup, Ray actors run sampling in the
background and send collected samples back to a main driver script. The driver
checks for such “ready” data frequently and then triggers central model
learning updates. Hence, sampling and learning happen at the same time.
Note that because of this, the policy/ies used for creating the samples
(action computations) might be slightly behind the centrally learned policy
model(s), even in an on-policy Algorithm.

Autoscaler#A Ray component that scales up and down the Ray cluster by adding and removing
Ray nodes according to the resources requested by applications running on
the cluster.

Autoscaling#The process of scaling up and down the Ray cluster automatically.


key: chroma:document
string_value:
Autoscaling#The process of scaling up and down the Ray cluster automatically.

Backend#A class containing the initialization and teardown logic for a specific deep
learning framework (eg. Torch, TensorFlow), used to set up distributed
data-parallel training for Ray Train’s built-in trainers.

Batch format#The way Ray Data represents batches of data.
Set batch_format in methods like
Dataset.iter_batches() and
Dataset.map_batches() to specify the
batch type.
>>> import ray
>>> dataset = ray.data.range(10)
>>> next(iter(dataset.iter_batches(batch_format="numpy", batch_size=5)))
{'id': array([0, 1, 2, 3, 4])}
>>> next(iter(dataset.iter_batches(batch_format="pandas", batch_size=5)))
   id
0   0
1   1
2   2
3   3
4   4


To learn more about batch formats, read
Configuring batch formats.

Batch size#A batch size in the context of model training is the number of data points used
to compute and apply one gradient update to the model weights.


key: chroma:document
string_value:
Block#A processing unit of data. A Dataset consists of a
collection of blocks.
Under the hood, Ray Data partitions rows into a set of distributed data blocks.
This allows it to perform operations in parallel.
Unlike a batch, which is a user-facing object, a block is an internal abstraction.

Placement Group Bundle#A collection of resources that must be reserved on a single Ray node.
Learn more.

Checkpoint#A Ray Train Checkpoint is a common interface for accessing data and models across
different Ray components and libraries. A Checkpoint can have its data
represented as a directory on local (on-disk) storage, as a directory on an
external storage (e.g., cloud storage), and as an in-memory dictionary.
Learn more,

Ray Client#The Ray Client is an API that connects a Python script to a remote Ray cluster.
Effectively, it allows you to leverage a remote Ray cluster just like you would
with Ray running on your local machine.
Learn more.


key: chroma:document
string_value:
Ray Cluster#A Ray cluster is a set of worker nodes connected to a common Ray head node.
Ray clusters can be fixed-size, or they can autoscale up and down according to
the resources requested by applications running on the cluster.

Connector#A connector performs transformations on data that comes out of a dataset or an
RL environment and is about to be passed to a model. Connectors are flexible
components and can be swapped out such that models are easily reusable and do
not have to be retrained for different data transformations.

Tune Config#This is the set of hyperparameters corresponding to a Tune trial.
Sampling from a hyperparameter search space will produce a config.

Ray Dashboard#Ray’s built-in dashboard is a web interface that provides metrics, charts,
and other features that help Ray users to understand and debug Ray applications.


key: chroma:document
string_value:
Dataset (object)#A class that produces a sequence of distributed data blocks.
Dataset exposes methods to read, transform, and consume data at scale.
To learn more about Datasets and the operations they support, read the Datasets API Reference.

Deployment#A deployment is a group of actors that can handle traffic in Ray Serve.
Deployments are defined as a single class with a number of options, including
the number of “replicas” of the deployment, each of which will map to a Ray
actor at runtime. Requests to a deployment are load balanced across its replicas.

Deployment graph#A deployment graph is a group of Ray Serve deployments that are bound together
into a directed acyclic graph (DAG) to handle requests. This enables model
composition. Each request will be passed through the graph, allowing multiple
stages of processing. For example, there might be a different deployment for
preprocessing, inference, and postprocessing.


key: chroma:document
string_value:
Ingress Deployment#The “ingress” deployment is the one that receives and responds to inbound user
traffic. It handles HTTP parsing and response formatting. In the case of a
deployment graph, it would also fan out requests to other deployments to do
things like a forward pass of an ML model.

Driver#“Driver” is the name of the process running the main script that starts all
other processes. For Python, this is usually the script you start with
python ....

Tune Driver#The Tune driver is the main event loop that’s happening on the node that
launched the Tune experiment. This event loop schedules trials given the
cluster resources, executes training on remote Trainable actors, and processes
results and checkpoints from those actors.


key: chroma:document
string_value:
Distributed Data-Parallel#A distributed data-parallel (DDP) training job scales machine learning training
to happen on multiple nodes, where each node processes one shard of the full
dataset. Every worker holds a copy of the model weights, and a common strategy
for updating weights is a “mirrored strategy”, where each worker will hold the
exact same weights at all times, and computed gradients are averaged then
applied across all workers.
With N worker nodes and a dataset of size D, each worker is responsible for
only D / N datapoints. If each worker node computes the gradient on a batch
of size B, then the effective batch size of the DDP training is N * B.


key: chroma:document
string_value:
Environment#The world or simulation, in which one or more reinforcement learning agents
have to learn to behave optimally in wrt. a given reward function. An
environment consists of an observation space, a reward function, an action
space, a state transition function, and a distribution over initial states
(after a reset).
Episodes consisting of one or more time-steps are played through an
environment in order to generate and collect samples for learning.
These samples contain one 4-tuple of
[observation, action, reward, next observation] per timestep.


key: chroma:document
string_value:
Episode#A series of subsequent RL environment timesteps, each of which is a
4-tuple: [observation, action, reward, next observation].
Episodes can end with the terminated- or truncated-flags being True.
An episode generally spans multiple time-steps for one or more agents.
The Episode is an important concept in RL as “optimal agent behavior” is
defined as choosing actions that maximize the sum of individual rewards
over the course of an episode.

Trial Executor#An internal Ray Tune component that manages
the resource management and execution of each trial’s corresponding remote
Trainable actor. The trial  executor’s responsibilities include launching
training, checkpointing, and restoring remote tasks.

Experiment#A Ray Tune or Ray Train experiment is a collection of one or more training jobs
that may correspond to different hyperparameter configurations. These
experiments are launched via the
Tuner API and the Trainer API.


key: chroma:document
string_value:
Fault tolerance#Fault tolerance in Ray Train and Tune consists of experiment-level and trial-level
restoration. Experiment-level restoration refers to resuming all trials,
in the event that an experiment is interrupted in the middle of training due
to a cluster-level failure. Trial-level restoration refers to resuming
individual trials, in the event that a trial encounters a runtime
error such as OOM.

Framework#The deep-learning framework used for the model(s), loss(es), and optimizer(s)
inside an RLlib Algorithm. RLlib currently supports PyTorch and TensorFlow.

GCS / Global Control Service#Centralized metadata server for a Ray cluster. It runs on the Ray head node
and has functions like managing node membership and actor directory.
It’s also known as the Global Control Store.

Head node#A node that runs extra cluster-level processes like GCS and API server in
addition to those processes running on a worker node. A Ray cluster only has
one head node.


key: chroma:document
string_value:
HPO#Hyperparameter optimization (HPO) is the process of choosing a set of optimal
hyperparameters for a learning algorithm. A hyperparameter can be a parameter
whose value is used to control the learning process (e.g., learning rate),
define the model architecture (e.g, number of hidden layers), or influence data
pre-processing. In the case of Ray Train, hyperparameters can also include
compute processing scale-out parameters such as the number of distributed
training workers.

Job#A ray job is a packaged ray application that can be executed on a
(remote) Ray cluster. Learn more.

Lineage#For Ray objects, this is the set of tasks that was originally executed to
produce the object. If an object’s value is lost due to node failure,
Ray may attempt to recover the value by re-executing the object’s lineage.


key: chroma:document
string_value:
Model#A function approximator with trainable parameters (e.g. a neural network) that
can be trained by an algorithm on available data or collected data from an RL
environment. The parameters are usually initialized at random (unlearned state).
During the training process, checkpoints of the model can be created such that -
after the learning process is shut down or crashes - training can resume from
the latest weights rather than having to re-learn from scratch.
After the training process is completed, models can be deployed into production
for inference using Ray Serve.


key: chroma:document
string_value:
Multi-agent#Denotes an RL environment setup, in which several (more than one) agents act
in the same environment and learn either the same or different optimal
behaviors. The relationship between the different agents in a multi-agent setup
might be adversarial (playing against each other), cooperative (trying to reach
a common goal) or neutral (the agents don’t really care about other agents’
actions). The NN model architectures that can be used for multi-agent training
range from “independent” (each agent trains its own separate model), over
“partially shared” (i.e. some agents might share their value function, because
they have a common goal), to “identical” (all agents train on the same model).

Namespace#A namespace is a logical grouping of jobs and named actors. When an actor is
named, its name must be unique within the namespace.
When a namespace is not specified, Ray will place your job in an anonymous
namespace.


key: chroma:document
string_value:
Node#A Ray node is a physical or virtual machine that is part of a Ray cluster.
See also Head node.

Object#An application value. These are values that are returned by a task or
created through ray.put.

Object ownership#Ownership is the concept used to decide where metadata for a certain
ObjectRef (and the task that creates the value) should be stored.
If a worker calls foo.remote() or ray.put(), it owns the metadata for
the returned ObjectRef, e.g., ref count and location information. If an
object’s owner dies and another worker tries to get the value,
it will receive an OwnerDiedError exception.

Object reference#A pointer to an application value, which can be stored anywhere in the cluster.
Can be created by calling foo.remote() or ray.put().
If using foo.remote(), then the returned ObjectRef is also a future.

Object store#A distributed in-memory data store for storing Ray objects.


key: chroma:document
string_value:
Object store#A distributed in-memory data store for storing Ray objects.

Object spilling#Objects in the object store are spilled to external storage once the capacity
of the object store is used up. This enables out-of-core data processing for
memory-intensive distributed applications. It comes with a performance penalty
since data needs to be written to disk.


key: chroma:document
string_value:
Observation#The full or partial state of an RL environment, which an agent sees
(has access to) at each timestep. A fully observable environment produces
observations that contain all the information to sufficiently infer the current
underlying state of the environment. Such states are also called “Markovian”.
Examples for environments with Markovian observations are chess or 2D games,
in which the player can see with each frame the entirety of the game’s state.
A partially observable (or non-Markovian) environment produces observations
that do not contain sufficient information to infer the exact underlying state.
An example here would be a robot with a camera on its head facing forward.
The robot walks around in a maze, but from a single camera frame might not know
what’s currently behind it.


key: chroma:document
string_value:
Offline data#Data collected in an RL environment up-front and stored in some data format
(e.g. JSON). Offline data can be used to train an RL agent. The data might have
been generated by a non-RL/ML system, such as a simple decision making script.
Also, when training from offline data, the RL algorithm will not be able to
explore new actions in new situations as all interactions with the environment
already happened in the past (were recorded prior to training).

Offline RL#A sub-field of reinforcement learning (RL), in which specialized offline
RL Algorithms learn how to compute optimal actions for an agent inside an
environment without the ability to interact live with that environment.
Instead, the data used for training has already been collected up-front
(maybe even by a non-RL/ML system). This is very similar to a supervised
learning setup. Examples for offline RL algorithms are MARWIL, CQL, and CRR.


key: chroma:document
string_value:
Off-Policy#A type of RL Algorithm. In an off-policy algorithm, the policy used to compute
the actions inside an RL environment (to generate the training data) might be
different from the one that is being optimized. Examples for off-policy
Algorithms are DQN, SAC, and DDPG.

On-Policy#A type of RL Algorithm. In an on-policy algorithm, the policy used to compute
the actions inside an RL environment (to generate the training data) must be the
exact same (matching NN weights at all times) than the one that is being
optimized. Examples for on-policy Algorithms are PPO, APPO, and IMPALA.

OOM (Out of Memory)#Ray may run out of memory if the application is using too much memory on a
single node. In this case the Ray OOM killer will kick
in and kill worker processes to free up memory.


key: chroma:document
string_value:
Placement group#Placement groups allow users to atomically reserve groups of resources across
multiple nodes (i.e., gang scheduling). They can be then used to schedule Ray
tasks and actors packed as close as possible for locality (PACK), or spread
apart (SPREAD). Placement groups are generally used for gang-scheduling actors,
but also support tasks.
Learn more.

Policy#A (neural network) model that maps an RL environment observation of some agent
to its next action inside an RL environment.

Predictor#An interface for performing inference (prediction)
on input data with a trained model.

Preprocessor#An interface used to preprocess a Dataset for
training and inference (prediction). Preprocessors
can be stateful, as they can be fitted on the training dataset before being
used to transform the training and evaluation datasets.

Ray application#A collection of Ray tasks, actors, and objects that originate from the
same script.


key: chroma:document
string_value:
Raylet#A system process that runs on each Ray node. It’s responsible for scheduling
and object management.

Replica#A replica is a single actor that handles requests to a given Serve deployment.
A deployment may consist of many replicas, either statically-configured via
num_replicas or dynamically configured using auto-scaling.

Resource (logical and physical)#Ray resources are logical resources (e.g. CPU, GPU) used by tasks and actors.
It doesn’t necessarily map 1-to-1 to physical resources of machines on which
Ray cluster runs. Learn more.

Reward#A single floating point value that each agent within an RL environment receives
after each action taken. An agent is defined to be acting optimally inside the
RL environment when the sum over all received rewards within an episode is
maximized.
Note that rewards might be delayed (not immediately telling the agent, whether
an action was good or bad) or sparse (often have a value of zero) making it
harder for the agent to learn.


key: chroma:document
string_value:
Rollout#The process of advancing through an episode in an RL environment (with one or
more RL agents) by taking sequential actions. During rollouts, the algorithm
should collect the environment produced 4-tuples [observations, actions,
rewards, next observations] in order to (later or simultaneously) learn how to
behave more optimally from this data.


key: chroma:document
string_value:
Rollout Worker#Component within a RLlib Algorithm responsible for advancing and collecting
observations and rewards in an RL environment. Actions for the different
agent(s) within the environment are computed by the Algorithms’ policy models.
A distributed algorithm might have several replicas of Rollout Workers running
as Ray actors in order to scale the data collection process for faster RL
training.
RolloutWorkers are used as @ray.remote actors to collect and return samples
from environments or offline files in parallel. An RLlib
Algorithm usually has
num_workers RolloutWorker (not @ray.remote) in
its WorkerSet under self.workers.
Depending on its evaluation config settings, an additional
WorkerSet with
Algorithm
under self.evaluation_workers.


key: chroma:document
string_value:
Runtime environment#A runtime environment defines dependencies such as files, packages, environment
variables needed for a Python script to run. It is installed dynamically on the
cluster at runtime, and can be specified for a Ray job, or for specific actors
and tasks. Learn more.

Remote Function#See Task.

Remote Class#See Actor.

(Ray) Scheduler#A Ray component that assigns execution units (Task/Actor) to Ray nodes.

Search Space#The definition of the possible values for hyperparameters. Can be composed out
of constants, discrete values, distributions of functions. This is also
referred to as the “parameter space” (param_space in the Tuner).


key: chroma:document
string_value:
Search algorithm#Search algorithms suggest new hyperparameter configurations to be evaluated
by Tune. The default search algorithm is random search, where each new
configuration is independent from the previous one. More sophisticated search
algorithms such as ones using Bayesian optimization will fit a model to predict
the hyperparameter configuration that will produce the best model, while also
exploring the space of possible hyperparameters. Many popular search algorithms
are built into Tune, most of which are integrations with other libraries.

Serve application#An application is the unit of upgrade in a Serve cluster.
An application consists of one or more deployments. One of these deployments
is considered the “ingress” deployment, which is where all inbound
traffic is handled.
Applications can be called via HTTP at their configured route_prefix.


key: chroma:document
string_value:
ServeHandle#ServeHandle is the Python API for making requests to Serve deployments. A
handle is defined by passing one bound Serve deployment to the constructor of
another. Then at runtime that reference can be used to make requests. This is
used to combine multiple deployments into “deployment graphs.”

Session#
A Ray Train/Tune session: Tune session at the experiment execution layer
and Train session at the Data Parallel training layer
if running data-parallel distributed training with Ray Train.
The session allows access to metadata, such as which trial is being run,
information about the total number of workers, as well as the rank of the
current worker. The session is also the interface through which an individual
Trainable can interact with the Tune experiment as a whole. This includes uses
such as reporting an individual trial’s metrics, saving/loading checkpoints,
and retrieving the corresponding dataset shards for each Train worker.


key: chroma:document
string_value:
A Ray cluster: in some cases the session also means a Ray Cluster.
For example, logs of a Ray cluster are stored under session_xxx/logs/.


Spillback#A task caller schedules a task by first sending a resource request to the
preferred raylet for that request. If the preferred raylet chooses not to grant
the resources locally, it may also “Spillback” and respond to the caller with
the address of a remote raylet at which the caller should retry the resource
request.

State#State of the environment an RL agent interacts with.

Synchronous execution#Two tasks A and B are executed synchronously if A must finish before B can
start. For example, if you call ray.get immediately after launching a remote
task with task.remote(), you’ll be running with synchronous execution,
since this will wait for the task to finish before the program continues.


key: chroma:document
string_value:
Synchronous sampling#Sampling workers work in synchronous steps. All of them must finish collecting
a new batch of samples before training can proceed to the next iteration.

Task#A remote function invocation. This is a single function invocation that
executes on a process different from the caller, and potentially on a different
machine. A task can be stateless (a @ray.remote function) or stateful (a
method of a @ray.remote class - see Actor below). A task is executed
asynchronously with the caller: the .remote() call immediately returns
one or more ObjectRefs (futures) that can be used to retrieve the
return value(s). See Actor task.


key: chroma:document
string_value:
Trainable#A Trainable is the interface that Ray Tune uses to
perform custom training
logic. User-defined Trainables take in a configuration as an input and can
run user-defined training code as well as custom metric reporting and
checkpointing.
There are many types of trainables. Most commonly used is the function
trainable API, which is simply a Python function that contains model training
logic and metric reporting. Tune also exposes a class trainable API, which
allows you to implement training, checkpointing, and restoring as different
methods.
Ray Tune associates each trial with its own Trainable – the Trainable is the
one actually doing training. The Trainable is a remote actor that can be placed
on any node in a Ray cluster.


key: chroma:document
string_value:
Trainer#A Trainer is the top-level API to configure a single distributed training job.
There are built-in Trainers for different frameworks,
like PyTorch, Tensorflow, and XGBoost. Each trainer shares a common interface
and otherwise defines framework-specific configurations and entrypoints. The
main job of a trainer is to coordinate N distributed training workers and set
up the communication backends necessary for these workers to communicate
(e.g., for sharing computed gradients).

Trainer configuration#A Trainer can be configured in various ways. Some
configurations are shared across all trainers, like the RunConfig, which
configures things like the experiment storage, and ScalingConfig, which
configures the number of training workers as well as resources needed per
worker. Other configurations are specific to the trainer framework.


key: chroma:document
string_value:
Training iteration#A partial training pass of input data up to pre-defined yield point
(e.g., time or data consumed) for checkpointing of long running training jobs.
A full training epoch can consist of multiple training iterations.
.. TODO: RLlib

Training epoch#A full training pass of the input dataset. Typically, model training iterates
through the full dataset in batches of size B, where gradients are calculated
on each batch and then applied as an update to the model weights. Training
jobs can consist of multiple epochs by training through the same dataset
multiple times.

Training step#An RLlib-specific method of the Algorithm class which includes the core logic
of an RL algorithm. Commonly includes gathering of experiences (either through
sampling or from offline data), optimization steps, redistribution of learnt
model weights. The particularities of this method are specific to algorithms
and configurations.


key: chroma:document
string_value:
Transition#A tuple of (observation, action, reward, next observation). A transition
represents one step of an agent in an environment.

Trial#One training run within a Ray Tune experiment. If you run multiple trials,
each trial usually corresponds to a different config (a set of hyperparameters).

Trial scheduler#When running a Ray Tune job, the scheduler will decide how to allocate
resources to trials. In the most common case, this resource is time - the trial
scheduler decides which trials to run at what time. Certain built-in schedulers
like Asynchronous Hyperband (ASHA) perform early stopping of under-performing
trials, while others like Population Based Training (PBT) will make
under-performing trials copy the hyperparameter config and model weights of
top performing trials and continue training.

Tuner#The Tuner is the top level Ray Tune API used to configure and run an
experiment with many trials.

Worker process / worker#The process that runs user defined tasks and actors.


key: chroma:document
string_value:
Worker process / worker#The process that runs user defined tasks and actors.











previous
Architecture Whitepapers




next
Security











Thanks for the feedback!


Was this helpful?




Yes





No



Feedback

Submit


  
    By The Ray Team
  
      © Copyright 2023, The Ray Team.


key: chroma:document
string_value:
/*!
 * Bootstrap v4.6.1 (https://getbootstrap.com/)
 * Copyright 2011-2021 The Bootstrap Authors
 * Copyright 2011-2021 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)


key: chroma:document
string_value:
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:540px;--breakpoint-md:720px;--breakpoint-lg:960px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier


key: chroma:document
string_value:
Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;line-height:1.5;color:#212529;text-align:left}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline


key: chroma:document
string_value:
dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;background-color:transparent}a:hover{color:#0056b3}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0


key: chroma:document
string_value:
1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-b


key: chroma:document
string_value:
z-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25r


key: chroma:document
string_value:
2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border-top:1px


key: chroma:document
string_value:
solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd


key: chroma:document
string_value:
.4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:540px){.container,.container-sm{max-width:540px}}@media (min-width:720px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:960px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media


key: chroma:document
string_value:
(min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1400px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;pad


key: chroma:document
string_value:
7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0


key: chroma:document
string_value:
0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0


key: chroma:document
string_value:
0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:540px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0


key: chroma:document
string_value:
50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0


key: chroma:document
string_value:
83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:720px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0


key: chroma:document
string_value:
0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0


key: chroma:document
string_value:
83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:960px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0


key: chroma:document
string_value:
0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0


key: chroma:document
string_value:
83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0


key: chroma:document
string_value:
0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0


key: chroma:document
string_value:
83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead


key: chroma:document
string_value:
td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover


key: chroma:document
string_value:
.table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover


key: chroma:document
string_value:
th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover


key: chroma:document
string_value:
tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead


key: chroma:document
string_value:
td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:539.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:719.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:959.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media


key: chroma:document
string_value:
(max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(0,123,255,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{appearance:none}select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem


key: chroma:document
string_value:
0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem


key: chroma:document
string_value:
+ 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline


key: chroma:document
string_value:
.form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem)!important;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4


key: chroma:document
string_value:
d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated select.form-control:valid,select.form-control.is-valid{padding-right:3rem!important;background-position:right 1.5rem center}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem)!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40'


key: chroma:document
string_value:
xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated


key: chroma:document
string_value:
.form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated


key: chroma:document
string_value:
.custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated


key: chroma:document
string_value:
:invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem)!important;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated select.form-control:invalid,select.form-control.is-invalid{padding-right:3rem!important;background-position:right 1.5rem center}.was-validated


key: chroma:document
string_value:
1.5rem center}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem)!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated


key: chroma:document
string_value:
+ .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated


key: chroma:document
string_value:
.custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:540px){.form-inline label{justify-content:center}.form-inline


key: chroma:document
string_value:
(min-width:540px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem


key: chroma:document
string_value:
solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem


key: chroma:document
string_value:
.5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem


key: chroma:document
string_value:
0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:540px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:720px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:960px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup


key: chroma:document
string_value:
solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft


key: chroma:document
string_value:
solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem


key: chroma:document
string_value:
solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1


key: chroma:document
string_value:
1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft


key: chroma:document
string_value:
.dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn


key: chroma:document
string_value:
input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1


key: chroma:document
string_value:
1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file


key: chroma:document
string_value:
.custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label:after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child)


key: chroma:document
string_value:
.custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend


key: chroma:document
string_value:
.btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem


key: chroma:document
string_value:
1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem


key: chroma:document
string_value:
.5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-t


key: chroma:document
string_value:
pend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0


key: chroma:document
string_value:
0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox


key: chroma:document
string_value:
50% no-repeat}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox


key: chroma:document
string_value:
.custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s


key: chroma:document
string_value:
.15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat;border:1px solid


key: chroma:document
string_value:
d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem +


key: chroma:document
string_value:
+ .75rem + 2px)}.custom-file-input{z-index:2;margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);overflow:hidden;font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem


key: chroma:document
string_value:
.75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media


key: chroma:document
string_value:
.15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media


key: chroma:document
string_value:
.15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media


key: chroma:document
string_value:
.15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s


key: chroma:document
string_value:
.15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs


key: chroma:document
string_value:
.nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar


key: chroma:document
string_value:
.container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid


key: chroma:document
string_value:
.75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:539.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:540px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav


key: chroma:document
string_value:
.navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:719.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:720px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav


key: chroma:document
string_value:
.navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:959.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:960px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav


key: chroma:document
string_value:
.navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav


key: chroma:document
string_value:
.navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav


key: chroma:document
string_value:
.navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav


key: chroma:document
string_value:
.navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav


key: chroma:document
string_value:
.navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px


key: chroma:document
string_value:
solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem


key: chroma:document
string_value:
- 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:540px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0


key: chroma:document
string_value:
wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:540px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child)


key: chroma:document
string_value:
.card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:540px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem


key: chroma:document
string_value:
1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child


key: chroma:document
string_value:
.page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em


key: chroma:document
string_value:
.4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem


key: chroma:document
string_value:
0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:540px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem


key: chroma:document
string_value:
.close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger


key: chroma:document
string_value:
hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15)


key: chroma:document
string_value:
25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid


key: chroma:document
string_value:
rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.l


key: chroma:document
string_value:
.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media


key: chroma:document
string_value:
(min-width:540px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media


key: chroma:document
string_value:
(min-width:720px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media


key: chroma:document
string_value:
(min-width:960px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media


key: chroma:document
string_value:
(min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0


key: chroma:document
string_value:
1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#


key: chroma:document
string_value:
olor:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-gr


key: chroma:document
string_value:
.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0


key: chroma:document
string_value:
1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open


key: chroma:document
string_value:
- 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% -


key: chroma:document
string_value:
- 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem


key: chroma:document
string_value:
1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:540px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width:960px){.modal-lg,.modal-xl{max-width:800px}}@media


key: chroma:document
string_value:
(min-width:960px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top


key: chroma:document
string_value:
0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left


key: chroma:document
string_value:
.4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid


key: chroma:document
string_value:
solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem


key: chroma:document
string_value:
- 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom


key: chroma:document
string_value:
.popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem


key: chroma:document
string_value:
- 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade


key: chroma:document
string_value:
.carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media


key: chroma:document
string_value:
.15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75


key: chroma:document
string_value:
fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes


key: chroma:document
string_value:
spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}@media


key: chroma:document
string_value:
(prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-inf


key: chroma:document
string_value:
ackground-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px


key: chroma:document
string_value:
solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid


key: chroma:document
string_value:
#dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left


key: chroma:document
string_value:
ounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media


key: chroma:document
string_value:
(min-width:540px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:720px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media


key: chroma:document
string_value:
(min-width:960px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media


key: chroma:document
string_value:
print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive


key: chroma:document
string_value:
embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1


key: chroma:document
string_value:
auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.


key: chroma:document
string_value:
n{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media


key: chroma:document
string_value:
(min-width:540px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1


key: chroma:document
string_value:
auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align


key: chroma:document
string_value:
lign-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media


key: chroma:document
string_value:
(min-width:720px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1


key: chroma:document
string_value:
auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align


key: chroma:document
string_value:
lign-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media


key: chroma:document
string_value:
(min-width:960px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1


key: chroma:document
string_value:
auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align


key: chroma:document
string_value:
lign-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media


key: chroma:document
string_value:
(min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1


key: chroma:document
string_value:
auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align


key: chroma:document
string_value:
lign-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media


key: chroma:document
string_value:
(min-width:540px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:720px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:960px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media


key: chroma:document
string_value:
(min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports


key: chroma:document
string_value:
(position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem


key: chroma:document
string_value:
rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-ri


key: chroma:document
string_value:
m!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25r


key: chroma:document
string_value:
tant}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-lef


key: chroma:document
string_value:
.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!im


key: chroma:document
string_value:
,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media


key: chroma:document
string_value:
(min-width:540px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-


key: chroma:document
string_value:
mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!impor


key: chroma:document
string_value:
portant}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.


key: chroma:document
string_value:
sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bot


key: chroma:document
string_value:
-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media


key: chroma:document
string_value:
(min-width:720px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-


key: chroma:document
string_value:
mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!impor


key: chroma:document
string_value:
portant}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.


key: chroma:document
string_value:
md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bot


key: chroma:document
string_value:
-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media


key: chroma:document
string_value:
(min-width:960px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-


key: chroma:document
string_value:
mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!impor


key: chroma:document
string_value:
portant}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.


key: chroma:document
string_value:
lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bot


key: chroma:document
string_value:
-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media


key: chroma:document
string_value:
(min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl


key: chroma:document
string_value:
.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!impo


key: chroma:document
string_value:
mportant}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}


key: chroma:document
string_value:
-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bo


key: chroma:document
string_value:
n-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation


key: chroma:document
string_value:
Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:540px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:720px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:960px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media


key: chroma:document
string_value:
(min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{


key: chroma:document
string_value:
over{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0


key: chroma:document
string_value:
a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd}blockquote,img,pre,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:960px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark


key: chroma:document
string_value:
th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}html{font-size:var(--pst-font-size-base);scroll-padding-top:calc(var(--pst-header-height) + 12px)}body{padding-top:var(--pst-header-height);background-color:#fff;font-family:var(--pst-font-family-base);font-weight:400;line-height:1.65;color:rgba(var(--pst-color-text-base),1)}p{margin-bottom:1.15rem;font-size:1em;color:rgba(var(--pst-color-paragraph),1)}p.rubric{border-bottom:1px solid #c9c9c9}a{color:rgba(var(--pst-color-link),1);text-decoration:none}a:hover{color:rgba(var(--pst-color-link-hover),1);text-decoration:underline}a.headerlink{color:rgba(var(--pst-color-headerlink),1);opacity:.4;font-size:.8em;padding:0 4px;margin-left:.2em;text-decoration:none;transition:all .3s


key: chroma:document
string_value:
4px;margin-left:.2em;text-decoration:none;transition:all .3s ease-out;user-select:none}a.headerlink:hover{opacity:1}.heading-style,h1,h2,h3,h4,h5,h6{margin:2.75rem 0 1.05rem;font-family:var(--pst-font-family-heading);font-weight:400;line-height:1.15}h1{margin-top:0;font-size:var(--pst-font-size-h1);color:rgba(var(--pst-color-h1),1)}h2{font-size:var(--pst-font-size-h2);color:rgba(var(--pst-color-h2),1)}h3{font-size:var(--pst-font-size-h3);color:rgba(var(--pst-color-h3),1)}h4{font-size:var(--pst-font-size-h4);color:rgba(var(--pst-color-h4),1)}h5{font-size:var(--pst-font-size-h5);color:rgba(var(--pst-color-h5),1)}h6{font-size:var(--pst-font-size-h6);color:rgba(var(--pst-color-h6),1)}.text_small,small{font-size:var(--pst-font-size-milli)}hr{border:0;border-top:1px solid #e5e5e5}code,kbd,pre,samp{font-family:var(--pst-font-family-monospace)}code{color:rgba(var(--pst-color-inline-code),1)}pre{margin:1.5em


key: chroma:document
string_value:
0;padding:10px;background-color:rgba(var(--pst-color-preformatted-background),1);color:rgba(var(--pst-color-preformatted-text),1);line-height:1.2em;border:1px solid #c9c9c9;border-radius:.2rem;box-shadow:1px 1px 1px #d8d8d8}dd{margin-top:3px;margin-bottom:10px;margin-left:30px}dl.field-list{display:grid;grid-template-columns:fit-content(30%) minmax(0,1fr)}.navbar{position:fixed;min-height:var(--pst-header-height);width:100%;padding:0}.navbar .container-xl{height:100%}@media (max-width:1199.98px){.navbar #navbar-start{margin-left:1em}.navbar button.navbar-toggler{margin-right:1em}}@media (min-width:960px){.navbar #navbar-end>.navbar-end-item{display:inline-block}}.navbar-brand{position:relative;height:var(--pst-header-height);width:auto;padding:.5rem 0;display:flex;align-items:center}.navbar-brand p{margin-bottom:0}.navbar-brand img{max-width:100%;height:100%;width:auto}.navbar-light{background:#fff!important;box-shadow:0 .125rem .25rem 0 rgba(0,0,0,.11)}.navbar-light .navbar-nav li


key: chroma:document
string_value:
.125rem .25rem 0 rgba(0,0,0,.11)}.navbar-light .navbar-nav li a.nav-link{padding:0 .5rem;color:rgba(var(--pst-color-navbar-link),1)}.navbar-light .navbar-nav li a.nav-link:hover{color:rgba(var(--pst-color-navbar-link-hover),1)}.navbar-light .navbar-nav>.active>.nav-link{font-weight:600;color:rgba(var(--pst-color-navbar-link-active),1)}.navbar-header a{padding:0 15px}.admonition,div.admonition{margin:1.5625em auto;padding:0 .6rem .8rem;overflow:hidden;page-break-inside:avoid;border-left:.2rem solid;border-left-color:rgba(var(--pst-color-admonition-default),1);border-bottom-color:rgba(var(--pst-color-admonition-default),1);border-right-color:rgba(var(--pst-color-admonition-default),1);border-top-color:rgba(var(--pst-color-admonition-default),1);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);transition:color .25s,background-color .25s,border-color .25s}.admonition :last-child,div.admonition :last-child{margin-bottom:0}.admonition


key: chroma:document
string_value:
.25s}.admonition :last-child,div.admonition :last-child{margin-bottom:0}.admonition p.admonition-title~*,div.admonition p.admonition-title~*{margin-left:1.4rem;margin-right:1.4rem}.admonition>ol,.admonition>ul,div.admonition>ol,div.admonition>ul{margin-left:1em}.admonition>.admonition-title,div.admonition>.admonition-title{position:relative;margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;font-weight:700;background-color:rgba(var(--pst-color-admonition-default),.1)}.admonition>.admonition-title:before,div.admonition>.admonition-title:before{position:absolute;left:.6rem;width:1rem;height:1rem;color:rgba(var(--pst-color-admonition-default),1);font-family:Font Awesome\ 5


key: chroma:document
string_value:
Free;font-weight:900;content:var(--pst-icon-admonition-default)}.admonition>.admonition-title+*,div.admonition>.admonition-title+*{margin-top:.4em}.admonition.attention,div.admonition.attention{border-color:rgba(var(--pst-color-admonition-attention),1)}.admonition.attention>.admonition-title,div.admonition.attention>.admonition-title{background-color:rgba(var(--pst-color-admonition-attention),.1)}.admonition.attention>.admonition-title:before,div.admonition.attention>.admonition-title:before{color:rgba(var(--pst-color-admonition-attention),1);content:var(--pst-icon-admonition-attention)}.admonition.caution,div.admonition.caution{border-color:rgba(var(--pst-color-admonition-caution),1)}.admonition.caution>.admonition-title,div.admonition.caution>.admonition-title{background-color:rgba(var(--pst-color-admonition-caution),.1)}.admonition.caution>.admonition-title:before,div.admonition.caution>.admonition-title:before{color:rgba(var(--pst-color-admonition-caution),1);content:var(--pst-ico


key: chroma:document
string_value:
ion>.admonition-title:before{color:rgba(var(--pst-color-admonition-caution),1);content:var(--pst-icon-admonition-caution)}.admonition.warning,div.admonition.warning{border-color:rgba(var(--pst-color-admonition-warning),1)}.admonition.warning>.admonition-title,div.admonition.warning>.admonition-title{background-color:rgba(var(--pst-color-admonition-warning),.1)}.admonition.warning>.admonition-title:before,div.admonition.warning>.admonition-title:before{color:rgba(var(--pst-color-admonition-warning),1);content:var(--pst-icon-admonition-warning)}.admonition.danger,div.admonition.danger{border-color:rgba(var(--pst-color-admonition-danger),1)}.admonition.danger>.admonition-title,div.admonition.danger>.admonition-title{background-color:rgba(var(--pst-color-admonition-danger),.1)}.admonition.danger>.admonition-title:before,div.admonition.danger>.admonition-title:before{color:rgba(var(--pst-color-admonition-danger),1);content:var(--pst-icon-admonition-danger)}.admonition.error,div.admonition.e


key: chroma:document
string_value:
r-admonition-danger),1);content:var(--pst-icon-admonition-danger)}.admonition.error,div.admonition.error{border-color:rgba(var(--pst-color-admonition-error),1)}.admonition.error>.admonition-title,div.admonition.error>.admonition-title{background-color:rgba(var(--pst-color-admonition-error),.1)}.admonition.error>.admonition-title:before,div.admonition.error>.admonition-title:before{color:rgba(var(--pst-color-admonition-error),1);content:var(--pst-icon-admonition-error)}.admonition.hint,div.admonition.hint{border-color:rgba(var(--pst-color-admonition-hint),1)}.admonition.hint>.admonition-title,div.admonition.hint>.admonition-title{background-color:rgba(var(--pst-color-admonition-hint),.1)}.admonition.hint>.admonition-title:before,div.admonition.hint>.admonition-title:before{color:rgba(var(--pst-color-admonition-hint),1);content:var(--pst-icon-admonition-hint)}.admonition.tip,div.admonition.tip{border-color:rgba(var(--pst-color-admonition-tip),1)}.admonition.tip>.admonition-title,div.admo


key: chroma:document
string_value:
.tip{border-color:rgba(var(--pst-color-admonition-tip),1)}.admonition.tip>.admonition-title,div.admonition.tip>.admonition-title{background-color:rgba(var(--pst-color-admonition-tip),.1)}.admonition.tip>.admonition-title:before,div.admonition.tip>.admonition-title:before{color:rgba(var(--pst-color-admonition-tip),1);content:var(--pst-icon-admonition-tip)}.admonition.important,div.admonition.important{border-color:rgba(var(--pst-color-admonition-important),1)}.admonition.important>.admonition-title,div.admonition.important>.admonition-title{background-color:rgba(var(--pst-color-admonition-important),.1)}.admonition.important>.admonition-title:before,div.admonition.important>.admonition-title:before{color:rgba(var(--pst-color-admonition-important),1);content:var(--pst-icon-admonition-important)}.admonition.note,div.admonition.note{border-color:rgba(var(--pst-color-admonition-note),1)}.admonition.note>.admonition-title,div.admonition.note>.admonition-title{background-color:rgba(var(--pst-


key: chroma:document
string_value:
nition.note>.admonition-title,div.admonition.note>.admonition-title{background-color:rgba(var(--pst-color-admonition-note),.1)}.admonition.note>.admonition-title:before,div.admonition.note>.admonition-title:before{color:rgba(var(--pst-color-admonition-note),1);content:var(--pst-icon-admonition-note)}table.field-list{border-collapse:separate;border-spacing:10px;margin-left:1px}table.field-list


key: chroma:document
string_value:
th.field-name{padding:1px 8px 1px 5px;white-space:nowrap;background-color:#eee}table.field-list td.field-body p{font-style:italic}table.field-list td.field-body p>strong{font-style:normal}table.field-list td.field-body blockquote{border-left:none;margin:0 0 .3em;padding-left:30px}.table.autosummary td:first-child{white-space:nowrap}.sig{font-family:var(--pst-font-family-monospace)}.sig-inline.c-texpr,.sig-inline.cpp-texpr{font-family:unset}.sig.c .k,.sig.c .kt,.sig.c .m,.sig.c .s,.sig.c .sc,.sig.cpp .k,.sig.cpp .kt,.sig.cpp .m,.sig.cpp .s,.sig.cpp .sc{color:rgba(var(--pst-color-text-base),1)}.sig-name{color:rgba(var(--pst-color-inline-code),1)}td.text-align\:left,th.text-align\:left{text-align:left}td.text-align\:right,th.text-align\:right{text-align:right}td.text-align\:center,th.text-align\:center{text-align:center}div.deprecated,div.versionadded,div.versionchanged{vertical-align:middle;margin:1.5625em auto;padding:0 .6rem;overflow:hidden;page-break-inside:avoid;border-left:.2rem


key: chroma:document
string_value:
auto;padding:0 .6rem;overflow:hidden;page-break-inside:avoid;border-left:.2rem solid;border-left-color:rgba(var(--pst-color-versionmodified-default),1);border-bottom-color:rgba(var(--pst-color-versionmodified-default),1);border-right-color:rgba(var(--pst-color-versionmodified-default),1);border-top-color:rgba(var(--pst-color-versionmodified-default),1);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);transition:color .25s,background-color .25s,border-color


key: chroma:document
string_value:
0 .0625rem rgba(0,0,0,.1);transition:color .25s,background-color .25s,border-color .25s;background-color:rgba(var(--pst-color-admonition-default),.1)}div.deprecated>p,div.versionadded>p,div.versionchanged>p{margin-bottom:.6rem;margin-top:.6rem}div.versionadded{border-color:rgba(var(--pst-color-versionmodified-added),1);background-color:rgba(var(--pst-color-versionmodified-added),.1)}div.versionchanged{border-color:rgba(var(--pst-color-versionmodified-changed),1);background-color:rgba(var(--pst-color-versionmodified-changed),.1)}div.deprecated{border-color:rgba(var(--pst-color-versionmodified-deprecated),1);background-color:rgba(var(--pst-color-versionmodified-deprecated),.1)}span.versionmodified{font-weight:700}span.versionmodified:before{font-style:normal;margin-right:.6rem;color:rgba(var(--pst-color-versionmodified-default),1);font-family:Font Awesome\ 5


key: chroma:document
string_value:
Awesome\ 5 Free;font-weight:900;content:var(--pst-icon-versionmodified-default)}span.versionmodified.added:before{color:rgba(var(--pst-color-versionmodified-added),1);content:var(--pst-icon-versionmodified-added)}span.versionmodified.changed:before{color:rgba(var(--pst-color-versionmodified-changed),1);content:var(--pst-icon-versionmodified-changed)}span.versionmodified.deprecated:before{color:rgba(var(--pst-color-versionmodified-deprecated),1);content:var(--pst-icon-versionmodified-deprecated)}blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}dt.label>span.brackets:not(:only-child):before{content:"["}dt.label>span.brackets:not(:only-child):after{content:"]"}a.footnote-reference{vertical-align:super;font-size:small}.topic{background-color:#eee}.seealso dd{margin-top:0;margin-bottom:0}.viewcode-back{font-family:var(--pst-font-family-base)}.viewcode-block:target{background-color:#f4debf;border-top:1px solid #ac9;border-bottom:1px solid #ac9}span.guilabel{border:1px


key: chroma:document
string_value:
solid #ac9;border-bottom:1px solid #ac9}span.guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}footer{width:100%;border-top:1px solid #ccc;padding:10px}footer .footer-item p{margin-bottom:0}.bd-search{position:relative;padding:1rem 15px;margin-right:-15px;margin-left:-15px}.bd-search .icon{position:absolute;color:#a4a6a7;left:25px}.bd-search input{border-radius:.2rem;border:1px solid #e5e5e5;padding-left:35px}.bd-toc{-ms-flex-order:2;order:2;height:calc(100vh - 2rem);overflow-y:auto}@supports (position:-webkit-sticky) or (position:sticky){.bd-toc{position:-webkit-sticky;position:sticky;top:var(--pst-header-height);height:calc(100vh - 5rem);overflow-y:auto}}.bd-toc .onthispage{color:#a4a6a7}.section-nav{padding-left:0;border-left:1px solid #eee;border-bottom:none}.section-nav ul{padding-left:1rem}.toc-entry,.toc-entry a{display:block}.toc-entry a{padding:.125rem


key: chroma:document
string_value:
ul{padding-left:1rem}.toc-entry,.toc-entry a{display:block}.toc-entry a{padding:.125rem 1.5rem;color:rgba(var(--pst-color-toc-link),1)}@media (min-width:1200px){.toc-entry a{padding-right:0}}.toc-entry a:hover{color:rgba(var(--pst-color-toc-link-hover),1);text-decoration:none}.bd-links{padding-top:1rem;padding-bottom:1rem;margin-right:-15px;margin-left:-15px}@media (min-width:720px){.bd-links{display:block}}.bd-sidenav{display:none}.bd-content{padding-top:20px}.bd-content .section{max-width:100%}.bd-content .section table{display:block;overflow:auto}.bd-toc-link{display:block;padding:.25rem 1.5rem;font-weight:600;color:rgba(0,0,0,.65)}.bd-toc-link:hover{color:rgba(0,0,0,.85);text-decoration:none}.bd-toc-item.active{margin-bottom:1rem}.bd-toc-item.active:not(:first-child){margin-top:1rem}.bd-toc-item.active>.bd-toc-link{color:rgba(0,0,0,.85)}.bd-toc-item.active>.bd-toc-link:hover{background-color:transparent}.bd-toc-item.active>.bd-sidenav{display:block}nav.bd-links


key: chroma:document
string_value:
p.caption{font-size:var(--pst-sidebar-caption-font-size);text-transform:uppercase;font-weight:700;position:relative;margin-top:1.25em;margin-bottom:.5em;padding:0 1.5rem;color:rgba(var(--pst-color-sidebar-caption),1)}nav.bd-links p.caption:first-child{margin-top:0}.bd-sidebar .nav{font-size:var(--pst-sidebar-font-size)}.bd-sidebar .nav ul{list-style:none;padding:0 0 0 1.5rem}.bd-sidebar .nav li>a{display:block;padding:.25rem 1.5rem;color:rgba(var(--pst-color-sidebar-link),1)}.bd-sidebar .nav li>a:hover{color:rgba(var(--pst-color-sidebar-link-hover),1);text-decoration:none;background-color:transparent}.bd-sidebar .nav li>a.reference.external:after{font-family:Font Awesome\ 5 Free;font-weight:900;content:"\f35d";font-size:.75em;margin-left:.3em}.bd-sidebar .nav .active:hover>a,.bd-sidebar .nav


